diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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 b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(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 b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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 b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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 b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..20e6476 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..20e6476 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..20e6476 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_order.xml b/app/src/main/res/drawable/ic_order.xml new file mode 100644 index 0000000..a28cdd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_order.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..20e6476 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_order.xml b/app/src/main/res/drawable/ic_order.xml new file mode 100644 index 0000000..a28cdd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_order.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_order_selected.xml b/app/src/main/res/drawable/ic_order_selected.xml new file mode 100644 index 0000000..11f3e46 --- /dev/null +++ b/app/src/main/res/drawable/ic_order_selected.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..20e6476 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_order.xml b/app/src/main/res/drawable/ic_order.xml new file mode 100644 index 0000000..a28cdd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_order.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_order_selected.xml b/app/src/main/res/drawable/ic_order_selected.xml new file mode 100644 index 0000000..11f3e46 --- /dev/null +++ b/app/src/main/res/drawable/ic_order_selected.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/order_selector.xml b/app/src/main/res/drawable/order_selector.xml new file mode 100644 index 0000000..dc55e57 --- /dev/null +++ b/app/src/main/res/drawable/order_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..20e6476 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_order.xml b/app/src/main/res/drawable/ic_order.xml new file mode 100644 index 0000000..a28cdd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_order.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_order_selected.xml b/app/src/main/res/drawable/ic_order_selected.xml new file mode 100644 index 0000000..11f3e46 --- /dev/null +++ b/app/src/main/res/drawable/ic_order_selected.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/order_selector.xml b/app/src/main/res/drawable/order_selector.xml new file mode 100644 index 0000000..dc55e57 --- /dev/null +++ b/app/src/main/res/drawable/order_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml new file mode 100644 index 0000000..9d060f4 --- /dev/null +++ b/app/src/main/res/layout/activity_big_image.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..20e6476 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_order.xml b/app/src/main/res/drawable/ic_order.xml new file mode 100644 index 0000000..a28cdd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_order.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_order_selected.xml b/app/src/main/res/drawable/ic_order_selected.xml new file mode 100644 index 0000000..11f3e46 --- /dev/null +++ b/app/src/main/res/drawable/ic_order_selected.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/order_selector.xml b/app/src/main/res/drawable/order_selector.xml new file mode 100644 index 0000000..dc55e57 --- /dev/null +++ b/app/src/main/res/drawable/order_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml new file mode 100644 index 0000000..9d060f4 --- /dev/null +++ b/app/src/main/res/layout/activity_big_image.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_order_completed_detail.xml b/app/src/main/res/layout/activity_order_completed_detail.xml new file mode 100644 index 0000000..924f0c2 --- /dev/null +++ b/app/src/main/res/layout/activity_order_completed_detail.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2284e7..d944f80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { signingConfigs { @@ -51,15 +50,9 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.smart.town.sanxi.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - applicationVariants.all { variant -> variant.outputs.all { - outputFileName = getBuildDate() + "_" + defaultConfig.versionName + ".apk" + outputFileName = "SX_" + getBuildDate() + "_" + defaultConfig.versionName + ".apk" } } } @@ -93,6 +86,8 @@ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' //图片加载框架 implementation 'com.github.bumptech.glide:glide:4.9.0' + //图片选择框架 + implementation 'io.github.lucksiege:pictureselector:v3.0.4' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' @@ -110,14 +105,11 @@ implementation 'com.amap.api:3dmap:latest.integration' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0' - //推送SDK - implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK - implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' implementation project(path: ':hatom-video-player') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2e068a..83f0a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,23 +52,18 @@ + + + + + - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt deleted file mode 100644 index 9996a4b..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.casic.smart.town.sanxi.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.model.AlarmListModel - -class AlarmAdapter( - context: Context, private val dataRows: MutableList -) : RecyclerView.Adapter() { - - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false) - ) - - override fun getItemCount(): Int = dataRows.size - - override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { - //绑定数据 - val rowsBean = dataRows[position] - - holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}") - holder.deviceStateView.text = rowsBean.onlineStateName - holder.locationView.text = String.format("异常点位置:${rowsBean.position}") - holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}") - - holder.itemView.setOnClickListener { - listener?.onClicked(position) - } - } - - inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { - var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView) - var deviceStateView: TextView = view.findViewById(R.id.deviceStateView) - var locationView: TextView = view.findViewById(R.id.locationView) - var installDateView: TextView = view.findViewById(R.id.installDateView) - } - - private var listener: OnItemClickListener? = null - - interface OnItemClickListener { - fun onClicked(position: Int) - } - - fun setOnItemClickListener(onClickListener: OnItemClickListener?) { - this.listener = onClickListener - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..759647c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,52 @@ +package com.casic.smart.town.sanxi.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.pengxh.kt.lite.extensions.convertColor + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + 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( + layoutInflater.inflate(R.layout.item_expand_view_rv, parent, false) + ) + + 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(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + 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/smart/town/sanxi/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt new file mode 100644 index 0000000..8176a68 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderCompletedAdapter.kt @@ -0,0 +1,118 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderCompletedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_completed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = String.format( + "${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}" + ) + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt new file mode 100644 index 0000000..36abfdf --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderInHandleAdapter.kt @@ -0,0 +1,111 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderInHandleAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_in_handle_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt new file mode 100644 index 0000000..e41c337 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotConfirmedAdapter.kt @@ -0,0 +1,105 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.arrowAnimation +import com.casic.smart.town.sanxi.model.ExpandableDataModel +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.TimeLineItemDecoration + +class OrderNotConfirmedAdapter( + 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) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_confirmed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + holder.currentStateView.text = + String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}") + + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + + 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() + } + } + } + + private fun createExpandableList(rowsBean: OrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return 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 currentStateView: TextView = view.findViewById(R.id.currentStateView) + var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt new file mode 100644 index 0000000..72405e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/OrderNotProcessedAdapter.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.OrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class OrderNotProcessedAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_order_not_processed_rv, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmContentView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = String.format("点位编号:${rowsBean.wellCode}") + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "报警值:未知" + } else { + "报警值:" + rowsBean.alarmValue + } + holder.alarmValueView.text = alarmValue + holder.wellLocationView.text = String.format("点位置:${rowsBean.position}") + //绑定事件 + holder.itemView.setOnClickListener { + listener?.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener?.onOperationClicked(position) + } + } + + 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 operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt new file mode 100644 index 0000000..aff52ec --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/TopViewPagerAdapter.kt @@ -0,0 +1,18 @@ +package com.casic.smart.town.sanxi.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) = pages[position] + + override fun getCount() = pages.size + + override fun getPageTitle(position: Int) = pageTitles[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt index 57c8b4f..a6e9e9c 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/base/BaseApplication.kt @@ -1,13 +1,9 @@ package com.casic.smart.town.sanxi.base import android.app.Application -import android.util.Log import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.greendao.DaoMaster -import com.casic.smart.town.sanxi.greendao.DaoSession import com.esri.arcgisruntime.ArcGISRuntimeEnvironment import com.hikvision.hatomplayer.HatomPlayerSDK -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import kotlin.properties.Delegates @@ -19,8 +15,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -29,19 +23,7 @@ SaveKeyValues.initSharedPreferences(this) ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license)) //去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)) - //推送 - PushManager.getInstance().initialize(this) - PushManager.getInstance().setDebugLogger(this) { - Log.d(kTag, it) - } - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartTown.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() //appKey 为保留字段,目前只需传入null或空字符串即可。 HatomPlayerSDK.init(this, "", true) } - - fun obtainDaoSession(): DaoSession { - return daoSession - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java b/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java deleted file mode 100644 index b8f67dc..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/bean/AlarmMessageLocaleBean.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.casic.smart.town.sanxi.bean; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class AlarmMessageLocaleBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String appId; - private String clientId; - private String taskId; - private String userId; - private String title; - private String content; - private String deviceCode; - private String isRead;//0-未读,1-已读 - private String alarmTime; - - @Generated(hash = 566950134) - public AlarmMessageLocaleBean(Long id, String messageId, String appId, - String clientId, String taskId, String userId, String title, - String content, String deviceCode, String isRead, String alarmTime) { - this.id = id; - this.messageId = messageId; - this.appId = appId; - this.clientId = clientId; - this.taskId = taskId; - this.userId = userId; - this.title = title; - this.content = content; - this.deviceCode = deviceCode; - this.isRead = isRead; - this.alarmTime = alarmTime; - } - - @Generated(hash = 1737519562) - public AlarmMessageLocaleBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getAppId() { - return this.appId; - } - - public void setAppId(String appId) { - this.appId = appId; - } - - public String getClientId() { - return this.clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getTaskId() { - return this.taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDeviceCode() { - return this.deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } - - public String getAlarmTime() { - return this.alarmTime; - } - - public void setAlarmTime(String alarmTime) { - this.alarmTime = alarmTime; - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt new file mode 100644 index 0000000..262f1fb --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ArrayList.kt @@ -0,0 +1,28 @@ +package com.casic.smart.town.sanxi.extensions + +/** + * ArrayList扩展方法 + */ + +//将图片集合格式化成满足上传格式的数据 +fun ArrayList.reformat(): String { + if (this.isEmpty()) return "" + val builder = StringBuilder() + //循环遍历元素,同时得到元素index(下标) + this.forEachIndexed { index, s -> + if (index == this.size - 1) { + builder.append(s) + } else { + builder.append(s).append(",") + } + } + return builder.toString() +} + +fun addAll(vararg args: String): ArrayList { + val result = ArrayList() + args.forEach { + result.add(it) + } + return result +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt new file mode 100644 index 0000000..512211d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.smart.town.sanxi.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/smart/town/sanxi/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt new file mode 100644 index 0000000..06cb326 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/QMUIEmptyView.kt @@ -0,0 +1,12 @@ +package com.casic.smart.town.sanxi.extensions + +import android.view.View +import com.qmuiteam.qmui.widget.QMUIEmptyView + +fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) { + this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener) +} + +fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) { + this.show(false, title, null, "刷新", onButtonClickListener) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt index 93548fc..a763c56 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt @@ -1,11 +1,18 @@ package com.casic.smart.town.sanxi.extensions +import android.content.Context import com.casic.smart.town.sanxi.model.ErrorMessageModel import com.casic.smart.town.sanxi.util.LocaleConstant +import com.casic.smart.town.sanxi.util.OnImageCompressListener import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject +import top.zibin.luban.Luban +import top.zibin.luban.OnCompressListener +import java.io.File +import java.util.* fun String.separateResponseCode(): Int { if (this.isBlank()) { @@ -51,4 +58,49 @@ "未知类型" } } +} + +fun String.toChinese(): String { + return when (this) { + "0" -> "全部" + "1" -> "一级" + "2" -> "二级" + "3" -> "三级" + else -> { + "未知" + } + } +} + +//拼接图片地址 +fun String.combineImagePath(): String { + if (this.isEmpty()) return this + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.DEFAULT_SERVER_CONFIG, + LocaleConstant.DEFAULT_SERVER + ) as String + return "$defaultValue/static/${this.replace("\\", "/")}" +} + +fun String.compressImage(context: Context, listener: OnImageCompressListener) { + Luban.with(context) + .load(this) + .ignoreBy(100) + .setTargetDir(context.createCompressImageDir().toString()) + .filter { + !(it.isBlank() || it.lowercase(Locale.getDefault()).endsWith(".gif")) + } + .setCompressListener(object : OnCompressListener { + override fun onStart() { + + } + + override fun onSuccess(file: File) { + listener.onSuccess(file) + } + + override fun onError(e: Throwable) { + listener.onError(e) + } + }).launch() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt deleted file mode 100644 index 84ca796..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.casic.smart.town.sanxi.fragment - -import android.os.Handler -import androidx.lifecycle.ViewModelProvider -import com.casic.smart.town.sanxi.R -import com.casic.smart.town.sanxi.adapter.AlarmAdapter -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.view.DeviceOnMapActivity -import com.casic.smart.town.sanxi.vm.AlarmViewModel -import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.android.synthetic.main.fragment_alarm.* - -class AlarmPageFragment : KotlinBaseFragment() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var alarmViewModel: AlarmViewModel - private lateinit var alarmAdapter: AlarmAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.fragment_alarm - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - - } - - override fun initData() { - weakReferenceHandler = WeakReferenceHandler(callback) - alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] - alarmViewModel.resultModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - alarmRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(requireContext()) - } - dataBeans.addAll(dataRows!!) - alarmRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022102801) - } - }) - } - - override fun initEvent() { - alarmRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - getAlarmListData() - } - alarmRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - getAlarmListData() - } - } - - override fun onResume() { - super.onResume() - pageIndex = 1 - getAlarmListData() - } - - private fun getAlarmListData() { - alarmViewModel.getAlarmListData("", "", pageIndex) - } - - private val callback = Handler.Callback { - if (it.what == 2022102801) { - if (isRefresh || isLoadMore) { - alarmAdapter.notifyDataSetChanged() - } else { - alarmAdapter = AlarmAdapter(requireContext(), dataBeans) - alarmRecyclerView!!.adapter = alarmAdapter - alarmAdapter.setOnItemClickListener(object : - AlarmAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val deviceId = dataBeans[position].id.toString() - if (deviceId.isBlank()) { - "设备ID异常,无法查看位置".show(requireContext()) - return - } - requireContext().navigatePageTo(deviceId) - } - }) - } - } - true - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt new file mode 100644 index 0000000..48e029e --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/OrderPageFragment.kt @@ -0,0 +1,49 @@ +package com.casic.smart.town.sanxi.fragment + +import androidx.fragment.app.Fragment +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.TopViewPagerAdapter +import com.casic.smart.town.sanxi.fragment.order.CompletedFragment +import com.casic.smart.town.sanxi.fragment.order.InHandleFragment +import com.casic.smart.town.sanxi.fragment.order.NotConfirmedFragment +import com.casic.smart.town.sanxi.fragment.order.NotProcessedFragment +import com.casic.smart.town.sanxi.util.LocaleConstant +import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_order.* +import java.util.* + +class OrderPageFragment : KotlinBaseFragment() { + + private var fragmentPages: ArrayList = ArrayList() + + init { + fragmentPages.add(NotProcessedFragment()) + fragmentPages.add(NotConfirmedFragment()) + fragmentPages.add(InHandleFragment()) + fragmentPages.add(CompletedFragment()) + } + + override fun initLayoutView(): Int = R.layout.fragment_order + + override fun setupTopBarLayout() { + + } + + override fun initData() { + val topViewPagerAdapter = TopViewPagerAdapter( + childFragmentManager, LocaleConstant.SUB_PAGE_TITLES, fragmentPages + ) + //页面永不销毁 + orderViewPager.offscreenPageLimit = fragmentPages.size + orderViewPager.adapter = topViewPagerAdapter + orderTabLayout.setupWithViewPager(orderViewPager) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt new file mode 100644 index 0000000..7ec74fd --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/CompletedFragment.kt @@ -0,0 +1,126 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderCompletedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.CompletedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_completed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class CompletedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var orderViewModel: OrderViewModel + private lateinit var completedAdapter: OrderCompletedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_completed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111001) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("3", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111001) { + if (isRefresh || isLoadMore) { + completedAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + completedAdapter = OrderCompletedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = completedAdapter + completedAdapter.setOnItemClickListener(object : + OrderCompletedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt new file mode 100644 index 0000000..eade61a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/InHandleFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderInHandleAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.InHandleDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_in_handle.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class InHandleFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var inHandleAdapter: OrderInHandleAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_in_handle + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111004) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("2", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111004) { + if (isRefresh || isLoadMore) { + inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + inHandleAdapter = OrderInHandleAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = inHandleAdapter + inHandleAdapter.setOnItemClickListener(object : + OrderInHandleAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt new file mode 100644 index 0000000..4329f12 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotConfirmedFragment.kt @@ -0,0 +1,123 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotConfirmedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.view.order.NotConfirmedDetailActivity +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_order_not_confirmed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotConfirmedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var notConfirmedAdapter: OrderNotConfirmedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111002) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("1", pageIndex) + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private val callback = Handler.Callback { + if (it.what == 2022111002) { + if (isRefresh || isLoadMore) { + notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您确认的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notConfirmedAdapter = OrderNotConfirmedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notConfirmedAdapter + notConfirmedAdapter.setOnItemClickListener(object : + OrderNotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt new file mode 100644 index 0000000..403741a --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/order/NotProcessedFragment.kt @@ -0,0 +1,171 @@ +package com.casic.smart.town.sanxi.fragment.order + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.OrderNotProcessedAdapter +import com.casic.smart.town.sanxi.extensions.showEmptyPage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.order.NotProcessedDetailActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderListViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.fragment_order_not_processed.* +import kotlinx.android.synthetic.main.include_empty_view.* + +class NotProcessedFragment : KotlinBaseFragment() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var orderListViewModel: OrderListViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var notProcessedAdapter: OrderNotProcessedAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.fragment_order_not_processed + + override fun observeRequestState() { + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + notProcessedAdapter.notifyItemRemoved(clickedPosition) + notProcessedAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun setupTopBarLayout() { + + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + orderListViewModel = ViewModelProvider(this)[OrderListViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + + orderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + orderLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + orderLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022111003) + } + }) + } + + override fun initEvent() { + orderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList() + } + orderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + obtainWorkOrderList() + } + + private fun obtainWorkOrderList() { + orderListViewModel.obtainWorkOrderListByState("0", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022111003) { + if (isRefresh || isLoadMore) { + notProcessedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("没有需要您处理的工单") { + pageIndex = 1 + obtainWorkOrderList() + } + } else { + emptyView!!.hide() + notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans) + orderRecyclerView!!.adapter = notProcessedAdapter + notProcessedAdapter.setOnItemClickListener(object : + OrderNotProcessedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(requireContext()) + return + } + requireContext().navigatePageTo(jobId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(requireContext()) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java deleted file mode 100644 index 68d7901..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/AlarmMessageLocaleBeanDao.java +++ /dev/null @@ -1,255 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "ALARM_MESSAGE_LOCALE_BEAN". -*/ -public class AlarmMessageLocaleBeanDao extends AbstractDao { - - public static final String TABLENAME = "ALARM_MESSAGE_LOCALE_BEAN"; - - /** - * Properties of entity AlarmMessageLocaleBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property AppId = new Property(2, String.class, "appId", false, "APP_ID"); - public final static Property ClientId = new Property(3, String.class, "clientId", false, "CLIENT_ID"); - public final static Property TaskId = new Property(4, String.class, "taskId", false, "TASK_ID"); - public final static Property UserId = new Property(5, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(6, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(7, String.class, "content", false, "CONTENT"); - public final static Property DeviceCode = new Property(8, String.class, "deviceCode", false, "DEVICE_CODE"); - public final static Property IsRead = new Property(9, String.class, "isRead", false, "IS_READ"); - public final static Property AlarmTime = new Property(10, String.class, "alarmTime", false, "ALARM_TIME"); - } - - - public AlarmMessageLocaleBeanDao(DaoConfig config) { - super(config); - } - - public AlarmMessageLocaleBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"ALARM_MESSAGE_LOCALE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"APP_ID\" TEXT," + // 2: appId - "\"CLIENT_ID\" TEXT," + // 3: clientId - "\"TASK_ID\" TEXT," + // 4: taskId - "\"USER_ID\" TEXT," + // 5: userId - "\"TITLE\" TEXT," + // 6: title - "\"CONTENT\" TEXT," + // 7: content - "\"DEVICE_CODE\" TEXT," + // 8: deviceCode - "\"IS_READ\" TEXT," + // 9: isRead - "\"ALARM_TIME\" TEXT);"); // 10: alarmTime - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"ALARM_MESSAGE_LOCALE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, AlarmMessageLocaleBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String appId = entity.getAppId(); - if (appId != null) { - stmt.bindString(3, appId); - } - - String clientId = entity.getClientId(); - if (clientId != null) { - stmt.bindString(4, clientId); - } - - String taskId = entity.getTaskId(); - if (taskId != null) { - stmt.bindString(5, taskId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(6, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(7, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(8, content); - } - - String deviceCode = entity.getDeviceCode(); - if (deviceCode != null) { - stmt.bindString(9, deviceCode); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(10, isRead); - } - - String alarmTime = entity.getAlarmTime(); - if (alarmTime != null) { - stmt.bindString(11, alarmTime); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public AlarmMessageLocaleBean readEntity(Cursor cursor, int offset) { - AlarmMessageLocaleBean entity = new AlarmMessageLocaleBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // appId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // clientId - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // taskId - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // userId - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // title - cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // content - cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // deviceCode - cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // isRead - cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10) // alarmTime - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, AlarmMessageLocaleBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setAppId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setClientId(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setTaskId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setUserId(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setTitle(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - entity.setContent(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7)); - entity.setDeviceCode(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8)); - entity.setIsRead(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); - entity.setAlarmTime(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); - } - - @Override - protected final Long updateKeyAfterInsert(AlarmMessageLocaleBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(AlarmMessageLocaleBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(AlarmMessageLocaleBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java deleted file mode 100644 index 4222c40..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - AlarmMessageLocaleBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - AlarmMessageLocaleBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(AlarmMessageLocaleBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java b/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java deleted file mode 100644 index 480ed84..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.smart.town.sanxi.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean; - -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig alarmMessageLocaleBeanDaoConfig; - - private final AlarmMessageLocaleBeanDao alarmMessageLocaleBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - alarmMessageLocaleBeanDaoConfig = daoConfigMap.get(AlarmMessageLocaleBeanDao.class).clone(); - alarmMessageLocaleBeanDaoConfig.initIdentityScope(type); - - alarmMessageLocaleBeanDao = new AlarmMessageLocaleBeanDao(alarmMessageLocaleBeanDaoConfig, this); - - registerDao(AlarmMessageLocaleBean.class, alarmMessageLocaleBeanDao); - } - - public void clear() { - alarmMessageLocaleBeanDaoConfig.clearIdentityScope(); - } - - public AlarmMessageLocaleBeanDao getAlarmMessageLocaleBeanDao() { - return alarmMessageLocaleBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java deleted file mode 100644 index 8c51878..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.casic.smart.town.sanxi.model; - -import java.util.List; - -public class AlarmListModel { - - private int code; - private DataModel data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataModel getData() { - return data; - } - - public void setData(DataModel data) { - this.data = data; - } - - public static class DataModel { - private List rows; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public static class RowsModel { - private String bfzt; - private String bfztName; - private String communication; - private String concenCode; - private String concenId; - private String deptName; - private String deptid; - private String devcode; - private String deviceName; - private String deviceType; - private String deviceTypeName; - private String id; - private String installDate; - private String installHeight; - private String modelId; - private String modelName; - private String onlineState; - private String onlineStateName; - private String position; - private String ts; - private String valid; - private String watchType; - private String wellCode; - private String wellId; - - public String getBfzt() { - return bfzt; - } - - public void setBfzt(String bfzt) { - this.bfzt = bfzt; - } - - public String getBfztName() { - return bfztName; - } - - public void setBfztName(String bfztName) { - this.bfztName = bfztName; - } - - public String getCommunication() { - return communication; - } - - public void setCommunication(String communication) { - this.communication = communication; - } - - public String getConcenCode() { - return concenCode; - } - - public void setConcenCode(String concenCode) { - this.concenCode = concenCode; - } - - public String getConcenId() { - return concenId; - } - - public void setConcenId(String concenId) { - this.concenId = concenId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeptid() { - return deptid; - } - - public void setDeptid(String deptid) { - this.deptid = deptid; - } - - public String getDevcode() { - return devcode; - } - - public void setDevcode(String devcode) { - this.devcode = devcode; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceTypeName() { - return deviceTypeName; - } - - public void setDeviceTypeName(String deviceTypeName) { - this.deviceTypeName = deviceTypeName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getInstallDate() { - return installDate; - } - - public void setInstallDate(String installDate) { - this.installDate = installDate; - } - - public String getInstallHeight() { - return installHeight; - } - - public void setInstallHeight(String installHeight) { - this.installHeight = installHeight; - } - - public String getModelId() { - return modelId; - } - - public void setModelId(String modelId) { - this.modelId = modelId; - } - - public String getModelName() { - return modelName; - } - - public void setModelName(String modelName) { - this.modelName = modelName; - } - - public String getOnlineState() { - return onlineState; - } - - public void setOnlineState(String onlineState) { - this.onlineState = onlineState; - } - - public String getOnlineStateName() { - return onlineStateName; - } - - public void setOnlineStateName(String onlineStateName) { - this.onlineStateName = onlineStateName; - } - - public String getPosition() { - return position; - } - - public void setPosition(String position) { - this.position = position; - } - - public String getTs() { - return ts; - } - - public void setTs(String ts) { - this.ts = ts; - } - - public String getValid() { - return valid; - } - - public void setValid(String valid) { - this.valid = valid; - } - - public String getWatchType() { - return watchType; - } - - public void setWatchType(String watchType) { - this.watchType = watchType; - } - - public String getWellCode() { - return wellCode; - } - - public void setWellCode(String wellCode) { - this.wellCode = wellCode; - } - - public String getWellId() { - return wellId; - } - - public void setWellId(String wellId) { - this.wellId = wellId; - } - } - } -} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java new file mode 100644 index 0000000..4a3f71d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ExpandableDataModel.java @@ -0,0 +1,20 @@ +package com.casic.smart.town.sanxi.model; + +public class ExpandableDataModel { + + private final String orderStateTime; + private final String operationPerson; + + public ExpandableDataModel(String orderStateTime, String operationPerson) { + this.orderStateTime = orderStateTime; + this.operationPerson = operationPerson; + } + + public String getOrderStateTime() { + return orderStateTime; + } + + public String getOperationPerson() { + return operationPerson; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java new file mode 100644 index 0000000..b33006d --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderDetailModel.java @@ -0,0 +1,445 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderDetailModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String firstState; + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String firstStatePhotos; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private List flow; + private int editable; + private String alarmTime; + private String handleMessage; + private String alarmMessage; + private String staff; + private String handlePhotos; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public String getFirstState() { + return firstState; + } + + public void setFirstState(String firstState) { + this.firstState = firstState; + } + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getFirstStatePhotos() { + return firstStatePhotos; + } + + public void setFirstStatePhotos(String firstStatePhotos) { + this.firstStatePhotos = firstStatePhotos; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public List getFlow() { + return flow; + } + + public void setFlow(List flow) { + this.flow = flow; + } + + public int getEditable() { + return editable; + } + + public void setEditable(int editable) { + this.editable = editable; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(String handleMessage) { + this.handleMessage = handleMessage; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getHandlePhotos() { + return handlePhotos; + } + + public void setHandlePhotos(String handlePhotos) { + this.handlePhotos = handlePhotos; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public static class FlowBean { + private String from; + private String to; + private String time; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java new file mode 100644 index 0000000..654324f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/OrderListModel.java @@ -0,0 +1,382 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class OrderListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String handleJobPerson; + private String alarmContentName; + private String shouldGetTime; + private String wellCode; + private String deptid; + private String alarmTypeName; + private String jobCode; + private String jobBelongTo; + private String jobFlag; + private String confirmJobPerson; + private String confirmJobTime; + private String jobStatusName; + private String alarmValue; + private String alarmId; + private String alarmLevel; + private String handleJobTime; + private String tel; + private String id; + private String wellId; + private String jobType; + private String alarmTime; + private String alarmMessage; + private String staff; + private String getJobTime; + private String getJobPerson; + private String shouldHandleTime; + private String jobId; + private String alarmType; + private String alarmStatus; + private String devcode; + private String createTime; + private String position; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getHandleJobPerson() { + return handleJobPerson; + } + + public void setHandleJobPerson(String handleJobPerson) { + this.handleJobPerson = handleJobPerson; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getShouldGetTime() { + return shouldGetTime; + } + + public void setShouldGetTime(String shouldGetTime) { + this.shouldGetTime = shouldGetTime; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getJobBelongTo() { + return jobBelongTo; + } + + public void setJobBelongTo(String jobBelongTo) { + this.jobBelongTo = jobBelongTo; + } + + public String getJobFlag() { + return jobFlag; + } + + public void setJobFlag(String jobFlag) { + this.jobFlag = jobFlag; + } + + public String getConfirmJobPerson() { + return confirmJobPerson; + } + + public void setConfirmJobPerson(String confirmJobPerson) { + this.confirmJobPerson = confirmJobPerson; + } + + public String getConfirmJobTime() { + return confirmJobTime; + } + + public void setConfirmJobTime(String confirmJobTime) { + this.confirmJobTime = confirmJobTime; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmId() { + return alarmId; + } + + public void setAlarmId(String alarmId) { + this.alarmId = alarmId; + } + + public String getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(String alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getHandleJobTime() { + return handleJobTime; + } + + public void setHandleJobTime(String handleJobTime) { + this.handleJobTime = handleJobTime; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getGetJobTime() { + return getJobTime; + } + + public void setGetJobTime(String getJobTime) { + this.getJobTime = getJobTime; + } + + public String getGetJobPerson() { + return getJobPerson; + } + + public void setGetJobPerson(String getJobPerson) { + this.getJobPerson = getJobPerson; + } + + public String getShouldHandleTime() { + return shouldHandleTime; + } + + public void setShouldHandleTime(String shouldHandleTime) { + this.shouldHandleTime = shouldHandleTime; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java new file mode 100644 index 0000000..5e0161f --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellDetailModel.java @@ -0,0 +1,305 @@ +package com.casic.smart.town.sanxi.model; + +public class WellDetailModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String deviceCount; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String qu; + private String responsibleDept; + private String responsibleDeptName; + private String ts; + private String valid; + private String wellCode; + private String wellFlag1; + private String wellFlag2; + private String wellFlag3; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getDeviceCount() { + return deviceCount; + } + + public void setDeviceCount(String deviceCount) { + this.deviceCount = deviceCount; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getQu() { + return qu; + } + + public void setQu(String qu) { + this.qu = qu; + } + + public String getResponsibleDept() { + return responsibleDept; + } + + public void setResponsibleDept(String responsibleDept) { + this.responsibleDept = responsibleDept; + } + + public String getResponsibleDeptName() { + return responsibleDeptName; + } + + public void setResponsibleDeptName(String responsibleDeptName) { + this.responsibleDeptName = responsibleDeptName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellFlag1() { + return wellFlag1; + } + + public void setWellFlag1(String wellFlag1) { + this.wellFlag1 = wellFlag1; + } + + public String getWellFlag2() { + return wellFlag2; + } + + public void setWellFlag2(String wellFlag2) { + this.wellFlag2 = wellFlag2; + } + + public String getWellFlag3() { + return wellFlag3; + } + + public void setWellFlag3(String wellFlag3) { + this.wellFlag3 = wellFlag3; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt deleted file mode 100644 index 875cb8c..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/ApplicationPushService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import com.igexin.sdk.PushService - -class ApplicationPushService : PushService() \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt b/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt deleted file mode 100644 index 396129f..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/service/PushIntentService.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.smart.town.sanxi.service - -import android.content.Context -import android.os.Message -import android.util.Log -import com.casic.smart.town.sanxi.util.LocaleConstant -import com.casic.smart.town.sanxi.view.MainActivity -import com.igexin.sdk.GTIntentService -import com.igexin.sdk.message.GTCmdMessage -import com.igexin.sdk.message.GTNotificationMessage -import com.igexin.sdk.message.GTTransmitMessage -import com.pengxh.kt.lite.extensions.toJson - -class PushIntentService : GTIntentService() { - - private val kTag = "SmartWellIntentService" - - override fun onReceiveServicePid(context: Context?, pid: Int) { - - } - - // 透传消息 - override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) { - Log.d(kTag, "透传消息 -> msg = $msg") - } - - // 接收 cid - override fun onReceiveClientId(context: Context?, clientid: String?) { - Log.d(kTag, "onReceiveClientId -> $clientid") - //通知MainActivity注册个推服务 - val msg: Message = MainActivity.weakReferenceHandler.obtainMessage() - msg.what = LocaleConstant.PUSH_REGISTER - msg.obj = clientid - MainActivity.weakReferenceHandler.sendMessage(msg) - } - - // cid 离线上线通知 - override fun onReceiveOnlineState(context: Context?, online: Boolean) { - - } - - // 各种事件处理回执 - override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) { - - } - - // 通知到达 - override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } - if (msg == null) { - return - } - Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) - } - - // 通知点击 - override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) { - Log.d(kTag, "通知点击 -> msg = $msg") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt deleted file mode 100644 index 0a52ef2..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/DataBaseManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.casic.smart.town.sanxi.util - -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.bean.AlarmMessageLocaleBean -import com.casic.smart.town.sanxi.greendao.AlarmMessageLocaleBeanDao - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = - BaseApplication.obtainInstance().obtainDaoSession().alarmMessageLocaleBeanDao - -// fun insertNotice( -// messageId: String, appid: String, clientId: String, -// taskId: String, userId: String, title: String, -// content: String, deviceCode: String, isRead: String, -// noticeTime: String -// ) { -// val noticeLocaleBean = NoticeLocaleBean() -// noticeLocaleBean.messageId = messageId -// noticeLocaleBean.appid = appid -// noticeLocaleBean.clientId = clientId -// noticeLocaleBean.taskId = taskId -// noticeLocaleBean.userId = userId -// noticeLocaleBean.title = title -// noticeLocaleBean.content = content -// noticeLocaleBean.deviceCode = deviceCode -// noticeLocaleBean.isRead = isRead -// noticeLocaleBean.noticeTime = noticeTime -// beanDao.insert(noticeLocaleBean) -// //角标设置 -// BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadNotice()) -// } - - fun deleteByMessageId(messageId: String) { - val result = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateNoticeByMessageId(messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(AlarmMessageLocaleBean::class.java) - .where(AlarmMessageLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(AlarmMessageLocaleBeanDao.Properties.AlarmTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - AlarmMessageLocaleBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt new file mode 100644 index 0000000..c5443a3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/GlideLoadEngine.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.ImageView +import androidx.annotation.Nullable +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.engine.ImageEngine +import com.luck.picture.lib.interfaces.OnCallbackListener +import com.luck.picture.lib.utils.ActivityCompatHelper + +class GlideLoadEngine private constructor() : ImageEngine { + companion object { + val instance: GlideLoadEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + GlideLoadEngine() + } + } + + override fun loadImage(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context).load(url).into(imageView); + } + + override fun loadImageBitmap( + context: Context, + url: String, + maxWidth: Int, + maxHeight: Int, + call: OnCallbackListener? + ) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .override(maxWidth, maxHeight) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady( + resource: Bitmap, @Nullable transition: Transition? + ) { + call?.onCall(resource) + } + + override fun onLoadFailed(@Nullable errorDrawable: Drawable?) { + call?.onCall(null) + } + + override fun onLoadCleared(@Nullable placeholder: Drawable?) {} + }) + } + + override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) { + if (!ActivityCompatHelper.assertValidRequest(context)) { + return + } + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .sizeMultiplier(0.5f) + .transform(CenterCrop(), RoundedCorners(8)) + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + .into(imageView) + } + + override fun pauseRequests(context: Context?) { + context?.let { Glide.with(it).pauseRequests() } + } + + override fun resumeRequests(context: Context?) { + context?.let { Glide.with(it).resumeRequests() } + } + + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .apply( + RequestOptions() + .placeholder(R.drawable.ps_image_placeholder) + .error(R.mipmap.load_image_error) + ) + .into(imageView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 7e43a9c..25a62e3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -43,4 +43,5 @@ R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9 ) + val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt new file mode 100644 index 0000000..d948751 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/OnImageCompressListener.kt @@ -0,0 +1,15 @@ +package com.casic.smart.town.sanxi.util + +import java.io.File + +interface OnImageCompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + fun onSuccess(file: File) + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + fun onError(e: Throwable) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt new file mode 100644 index 0000000..49e2f95 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/RouteOnMap.kt @@ -0,0 +1,27 @@ +package com.casic.smart.town.sanxi.util + +import android.content.Context +import android.graphics.Color +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.pengxh.kt.lite.extensions.showBusRouteOnMap +import com.pengxh.kt.lite.extensions.showRouteOnMap +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet + +object RouteOnMap { + fun startNavigation(context: Context, s: String, latlng: LatLng) { + BottomActionSheet.Builder() + .setContext(context) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(arrayListOf("步行导航", "驾驶模式")) + .setOnActionSheetListener(object : + BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> Poi(s, latlng, "").showRouteOnMap(context) + 1 -> Poi(s, latlng, "").showBusRouteOnMap(context) + } + } + }).build().show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/TimeLineItemDecoration.kt @@ -0,0 +1,95 @@ +package com.casic.smart.town.sanxi.util + +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.smart.town.sanxi.R +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px + +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(context) + linePaint.strokeWidth = 1.5f.dp2px(context).toFloat() + radius = 7.5f.dp2px(context) + } + + override fun getItemOffsets( + outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.left = 16.5f.dp2px(context) + } + + 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(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = 1.5f.dp2px(context).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/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index e079e75..caf7e81 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -1,5 +1,6 @@ package com.casic.smart.town.sanxi.util.retrofit +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.http.* @@ -64,6 +65,100 @@ suspend fun obtainVersionResult(@Header("token") token: String): String /** + * 接单 + * + * @param id 工单id + */ + @FormUrlEncoded + @POST("/job/getJob") + suspend fun acceptWorkOrder( + @Header("token") token: String, + @Field("id") id: String + ): String + + /** + * 确认工单 + * @param id 工单id + * @param firstState 现场情况描述 + * @param firstStatePhotos 现场情况照片路径集合 + * @param needHandle 是否需要处理,1是需要处理,0是不需要处理(决定转入处理中还是已完成) + */ + @FormUrlEncoded + @POST("/job/confirmJob") + suspend fun confirmWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("firstState") firstState: String, + @Field("firstStatePhotos") firstStatePhotos: String, + @Field("needHandle") needHandle: String + ): String + + /** + * 完成工单 + * + * @param id 工单id + * @param handleMessage 现场情况描述 + * @param handlePhotos 现场情况照片路径集合 + */ + @FormUrlEncoded + @POST("/job/overJob") + suspend fun completeWorkOrder( + @Header("token") token: String, + @Field("id") id: String, + @Field("handleMessage") handleMessage: String, + @Field("handlePhotos") handlePhotos: String + ): String + + /** + * 根据工单状态获取工单列表 + * + * @param jobStatus 工单状态 + * @param limit 每页数据条数 + * @param offset 页码 + */ + @GET("/job/list") + suspend fun obtainWorkOrderList( + @Header("token") token: String, + @Query("jobStatus") jobStatus: 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 + + /** + * 上传图片 + * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/imageUpload") + suspend fun uploadImage( + @Header("token") token: String, + @Part file: MultipartBody.Part + ): String + + /** + * 获取闸井详情 + * + * @param id 窨井ID + */ + @GET("/overview/wellInfo") + suspend fun obtainWellDetail( + @Header("token") token: String, + @Query("id") id: String + ): String + + /** * 各类基础设施数量 * */ @GET("/statics/facilitiesStaticsByType") @@ -81,18 +176,6 @@ @GET("/statics/deviceStaticsByType") suspend fun countDevice(@Header("token") token: String): String - /** - * 异常设备状态列表 - * */ - @GET("/statics/deviceListPage") - suspend fun getAlarmListData( - @Header("token") token: String, - @Query("beginTime") beginTime: String, - @Query("endTime") endTime: String, - @Query("limit") limit: Int, - @Query("offset") offset: Int - ): String - @GET("/statics/devicePosition") suspend fun queryWellInfo( @Header("token") token: String, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 6f1fe87..4bd0e79 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -5,8 +5,12 @@ import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.io.File object RetrofitServiceManager { @@ -75,6 +79,72 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + /** + * 接单 + */ + suspend fun acceptWorkOrder(id: String): String { + return api.acceptWorkOrder(AuthenticationHelper.token!!, id) + } + + /** + * 确认工单 + */ + suspend fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ): String { + return api.confirmWorkOrder( + AuthenticationHelper.token!!, + id, firstState, firstStatePhotos, needHandle + ) + } + + /** + * 完成工单 + */ + suspend fun completeWorkOrder( + id: String, handleMessage: String, handlePhotos: String + ): String { + return api.completeWorkOrder( + AuthenticationHelper.token!!, id, handleMessage, handlePhotos + ) + } + + /** + * 根据工单状态获取工单列表 + */ + suspend fun obtainWorkOrderList(jobStatus: String, page: Int): String { + return api.obtainWorkOrderList( + AuthenticationHelper.token!!, + jobStatus, + LocaleConstant.PAGE_LIMIT, + page + ) + } + + /** + * 获取工单详情 + */ + suspend fun obtainWorkOrderDetail(id: String): String { + return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id) + } + + /** + * 上传图片 + */ + suspend fun uploadImage(image: File): String { + val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image) + val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody) + return api.uploadImage(AuthenticationHelper.token!!, imagePart) + } + + /** + * 获取闸井详情 + */ + suspend fun obtainWellDetail(id: String): String { + return api.obtainWellDetail(AuthenticationHelper.token!!, id) + } + suspend fun countInfrastructure(): String { return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) } @@ -100,16 +170,6 @@ return smartTownApi.countDevice(AuthenticationHelper.token!!) } - suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String { - return smartTownApi.getAlarmListData( - AuthenticationHelper.token!!, - beginTime, - endTime, - LocaleConstant.PAGE_LIMIT, - offset - ) - } - suspend fun queryWellInfo(deviceId: String): String { return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId) } diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt new file mode 100644 index 0000000..a1df629 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BigImageActivity.kt @@ -0,0 +1,88 @@ +package com.casic.smart.town.sanxi.view + +import android.content.Context +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import androidx.viewpager.widget.ViewPager +import com.bumptech.glide.Glide +import com.casic.smart.town.sanxi.R +import com.luck.picture.lib.photoview.PhotoView +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_big_image.* +import java.util.* + +class BigImageActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_big_image + + override fun setupTopBarLayout() { + ImmerseStatusBarUtil.setColor(this, Color.BLACK) + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) + if (urls == null || urls.size == 0) { + return + } + val imageSize = urls.size + pageNumberView.text = String.format("(" + (index + 1) + "/" + imageSize + ")") + imagePagerView.adapter = BigImageAdapter(this, urls) + imagePagerView.currentItem = index + imagePagerView.offscreenPageLimit = imageSize + imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, positionOffset: Float, positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + pageNumberView.text = String.format("(" + (position + 1) + "/" + imageSize + ")") + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + } + + inner class BigImageAdapter( + private val context: Context, private val data: ArrayList + ) : PagerAdapter() { + + override fun getCount(): Int = data.size + + override fun isViewFromObject(view: View, any: Any): Boolean { + return view == any + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val view = + LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) + val photoView: PhotoView = view.findViewById(R.id.photoView) + Glide.with(context).load(data[position]).into(photoView) + photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE + container.addView(view) + //点击大图取消预览 + photoView.setOnClickListener { finish() } + return view + } + + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { + container.removeView(any as View) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt index 047df78..b0fcddd 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/MainActivity.kt @@ -6,26 +6,19 @@ import androidx.viewpager.widget.ViewPager import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.adapter.ViewPagerAdapter -import com.casic.smart.town.sanxi.fragment.AlarmPageFragment -import com.casic.smart.town.sanxi.fragment.MorePageFragment import com.casic.smart.town.sanxi.fragment.MonitorPageFragment +import com.casic.smart.town.sanxi.fragment.MorePageFragment +import com.casic.smart.town.sanxi.fragment.OrderPageFragment import com.casic.smart.town.sanxi.fragment.StatisticsPageFragment import com.gyf.immersionbar.ImmersionBar -import com.igexin.sdk.PushManager import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.android.synthetic.main.activity_main.* class MainActivity : KotlinBaseActivity() { - companion object { - lateinit var weakReferenceHandler: WeakReferenceHandler - } - - private val kTag = "MainActivity" private var menuItem: MenuItem? = null private var fragmentPages: ArrayList = ArrayList() private var clickTime: Long = 0 @@ -33,7 +26,7 @@ init { fragmentPages.add(StatisticsPageFragment()) fragmentPages.add(MonitorPageFragment()) - fragmentPages.add(AlarmPageFragment()) + fragmentPages.add(OrderPageFragment()) fragmentPages.add(MorePageFragment()) } @@ -45,12 +38,7 @@ } override fun initData() { - //推送,多次调用 SDK 初始化并无影响。 - PushManager.getInstance().initialize(this) - weakReferenceHandler = WeakReferenceHandler { - true - } } override fun observeRequestState() { @@ -67,7 +55,7 @@ R.id.nav_monitor -> { mainViewPager.currentItem = 1 } - R.id.nav_alarm -> { + R.id.nav_order -> { mainViewPager.currentItem = 2 } R.id.nav_more -> { diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt new file mode 100644 index 0000000..eb0ad50 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/CompletedDetailActivity.kt @@ -0,0 +1,154 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_completed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class CompletedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private val context: Context = this@CompletedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_completed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + completedDateView.text = orderDetail.handleJobTime + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt new file mode 100644 index 0000000..0423e3c --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/InHandleDetailActivity.kt @@ -0,0 +1,405 @@ +package com.casic.smart.town.sanxi.view.order + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_in_handle_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class InHandleDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private val context: Context = this@InHandleDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_in_handle_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + this.jobId = intent.getStringExtra(Constant.INTENT_PARAM)!!//初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //处理完成工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + @SuppressLint("SetTextI18n") + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = "${text.length}/100" + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + //现场情况 + val firstState = orderDetail.firstState.toString() + currentStateView.text = firstState + if (firstState.length > 12) { + stateTipsView.visibility = View.VISIBLE + stateTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("现场情况完整信息") + .setMessage(firstState) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + stateTipsView.visibility = View.GONE + } + + //绑定窨井图片 + if (orderDetail.firstStatePhotos.toString().isBlank()) { + imageGridView.visibility = View.GONE + } else { + imageGridView.visibility = View.VISIBLE + //处理图片地址 + val urls: ArrayList = ArrayList() + val imageArray = orderDetail.firstStatePhotos.toString().split(",") + imageArray.forEach { path -> + if (path.isNotBlank()) { + urls.add(path.combineImagePath()) + } + } + val imageAdapter = ReadOnlyImageAdapter(this) + imageAdapter.setImageList(urls) + imageGridView.adapter = imageAdapter + imageGridView.setOnItemClickListener { _, _, position, _ -> + if (urls[position].isBlank()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, urls) + } + } + } + + confirmPersonView.text = orderDetail.confirmJobPerson + + //维护情况 + sceneEditView.setText(orderDetail.handleMessage) + + confirmDateView.text = orderDetail.confirmJobTime + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交工单处理 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入维护情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传维护图片".show(this) + return@setOnClickListener + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.completeWorkOrder( + orderId, state, imagePaths.reformat() + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062901 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062901) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 +// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { +// result.realPath +// } else { +// result.sandboxPath +// } +// Log.d(kTag, "初始路径:" + result.path) +// Log.d(kTag, "绝对路径:" + result.realPath) +// Log.d(kTag, "原图路径:" + result.originalPath) +// Log.d(kTag, "沙盒路径:" + result.sandboxPath) + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + Log.d("Casic", "OrderInHandleDetailActivity => onSuccess: ${file.absolutePath}") + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt new file mode 100644 index 0000000..da20374 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotConfirmedDetailActivity.kt @@ -0,0 +1,353 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.graphics.Color +import android.os.CountDownTimer +import android.os.Handler +import android.text.Editable +import android.text.TextWatcher +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.combineImagePath +import com.casic.smart.town.sanxi.extensions.compressImage +import com.casic.smart.town.sanxi.extensions.reformat +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.GlideLoadEngine +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.util.OnImageCompressListener +import com.casic.smart.town.sanxi.view.BigImageActivity +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.UploadImageViewModel +import com.gyf.immersionbar.ImmersionBar +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.android.synthetic.main.activity_order_not_confirmed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.io.File + +class NotConfirmedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var uploadImageViewModel: UploadImageViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var imageAdapter: EditableImageAdapter + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var needHandle: String + private val context: Context = this@NotConfirmedDetailActivity + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_not_confirmed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = EditableImageAdapter(this, 3, 13f) + addImageRecyclerView.adapter = imageAdapter + + weakReferenceHandler = WeakReferenceHandler(callback) + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + uploadImageViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...") + else -> LoadingDialogHub.dismiss() + } + }) + + //确认工单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "处理中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + sceneEditView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString().trim() + inputLengthView.text = String.format("${text.length}/100") + if (text.length > 100) { + inputLengthView.setTextColor(R.color.redTextColor.convertColor(context)) + "现场情况字符不能超过100个字符".show(context) + } else { + inputLengthView.setTextColor(R.color.subTextColor.convertColor(context)) + } + } + }) + + orderViewModel.obtainWorkOrderDetail(jobId) + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + + //提交 + submitButton.setOnClickListener { + val orderId = orderDetail.jobId.toString() + if (orderId.isBlank()) { + "工单ID异常,无法确认工单".show(this) + return@setOnClickListener + } + val state = sceneEditView.text.toString().trim() + if (state.isBlank()) { + "请输入现场情况".show(this) + return@setOnClickListener + } + if (state.length > 100) { + "请输入少于100个字".show(this) + return@setOnClickListener + } + if (imagePaths.size == 0) { + "请上传现场图片".show(this) + return@setOnClickListener + } + needHandle = when { + normalRadioButton.isChecked -> { + "0" + } + abnormalRadioButton.isChecked -> { + "1" + } + else -> { + "请选择点位当前情况".show(this) + return@setOnClickListener + } + } + //弹窗提示用户 + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要提交吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + operationViewModel.confirmWorkOrder( + orderId, state, imagePaths.reformat(), needHandle + ) + } + + override fun onCancelClick() { + + } + }).build().show() + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(context) + } else { + context.navigatePageTo(position, realPaths) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + uploadImageViewModel.resultModel.observe(this, { + if (it.code == 200) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + val url = it.data.toString() + if (url.isNotBlank()) { + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + } + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能上传3张图片".show(this) + } + } + }) + } + + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setItemTextColor(Color.BLUE) + .setActionItemTitle(listOf("拍照", "相册")) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + PictureSelector.create(context) + .openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "拍照保存失败,请重试".show(context) + return + } + analyticalSelectResults(result[0]) + } + + override fun onCancel() { + + } + }) + } + 1 -> { + PictureSelector.create(context) + .openGallery(SelectMimeType.ofImage()) + .isGif(false) + .isMaxSelectEnabledMask(true) + .setFilterMinFileSize(100) + .setMaxSelectNum(3) + .isDisplayCamera(false) + .setImageEngine(GlideLoadEngine.instance) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: ArrayList?) { + if (result == null) { + "选择照片失败,请重试".show(context) + return + } + // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 + val sum = (result.size * 500).toLong() + object : CountDownTimer(sum, 500) { + override fun onTick(millisUntilFinished: Long) { + val i = millisUntilFinished / 500 + val message = weakReferenceHandler.obtainMessage() + message.obj = result[i.toInt()] + message.what = 2022062902 + weakReferenceHandler.handleMessage(message) + } + + override fun onFinish() { + + } + }.start() + } + + override fun onCancel() { + + } + }) + } + } + } + }) + .build().show() + } + + private val callback = Handler.Callback { + if (it.what == 2022062902) { + analyticalSelectResults(it.obj as LocalMedia) + } + true + } + + private fun analyticalSelectResults(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + //上传图片 + uploadImageViewModel.uploadImage(file) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt new file mode 100644 index 0000000..3678538 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/order/NotProcessedDetailActivity.kt @@ -0,0 +1,168 @@ +package com.casic.smart.town.sanxi.view.order + +import android.content.Context +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.extensions.toChinese +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.OperationViewModel +import com.casic.smart.town.sanxi.vm.OrderViewModel +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class NotProcessedDetailActivity : KotlinBaseActivity() { + + private lateinit var jobId: String + private lateinit var orderViewModel: OrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private val context: Context = this@NotProcessedDetailActivity + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + orderViewModel = ViewModelProvider(this)[OrderViewModel::class.java] + operationViewModel = ViewModelProvider(this)[OperationViewModel::class.java] + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + + orderViewModel.obtainWorkOrderDetail(jobId) + } + + override fun observeRequestState() { + //数据加载状态处理 + orderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后") + else -> LoadingDialogHub.dismiss() + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> LoadingDialogHub.show(this, "接单中,请稍后") + is LoadState.Success -> { + LoadingDialogHub.dismiss() + this.finish() + } + else -> LoadingDialogHub.dismiss() + } + }) + } + + override fun initEvent() { + orderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("点位完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了") + .setOnDialogButtonClickListener(object : + AlertMessageDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + + } + }).build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(id = orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "点位ID异常,无法导航".show(context) + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.wellDetailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "点位经纬度异常,无法开启导航".show(context) + } else { +// RouteOnMap.startNavigation( +// this, +// orderDetail.position, +// LatLng(lat.toDouble(), lng.toDouble()) +// ) + } + } + }) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt deleted file mode 100644 index 9716725..0000000 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.smart.town.sanxi.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.smart.town.sanxi.base.BaseApplication -import com.casic.smart.town.sanxi.extensions.separateResponseCode -import com.casic.smart.town.sanxi.extensions.toErrorMessage -import com.casic.smart.town.sanxi.model.AlarmListModel -import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel - -class AlarmViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val resultModel = MutableLiveData() - - fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({ - val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show(BaseApplication.obtainInstance()) - } - }, { - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt new file mode 100644 index 0000000..9286485 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OperationViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smart.town.sanxi.vm + +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 接单、处理等vm + * */ +class OperationViewModel : BaseViewModel() { + + fun acceptWorkOrder(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.acceptWorkOrder(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "接单成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun confirmWorkOrder( + id: String, firstState: String, + firstStatePhotos: String, needHandle: String + ) = launch({ + loadState.value = LoadState.Loading + val response = + RetrofitServiceManager.confirmWorkOrder(id, firstState, firstStatePhotos, needHandle) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单确认成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) + + fun completeWorkOrder(id: String, handleMessage: String, handlePhotos: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.completeWorkOrder(id, handleMessage, handlePhotos) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "工单处理成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt new file mode 100644 index 0000000..ebd687b --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderListViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderListModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class OrderListViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun obtainWorkOrderListByState(jobStatus: String, page: Int) = launch({ + val response = RetrofitServiceManager.obtainWorkOrderList(jobStatus, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt new file mode 100644 index 0000000..ce3b262 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/OrderViewModel.kt @@ -0,0 +1,38 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.OrderDetailModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +class OrderViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val detailModel = MutableLiveData() + + fun obtainWorkOrderDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWorkOrderDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt new file mode 100644 index 0000000..99077e1 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UploadImageViewModel.kt @@ -0,0 +1,39 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.CommonResultModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState +import java.io.File + +class UploadImageViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun uploadImage(image: File) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadImage(image) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 4fb2740..bf214a5 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -4,6 +4,7 @@ import com.casic.smart.town.sanxi.base.BaseApplication import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.WellDetailModel import com.casic.smart.town.sanxi.model.WellInfoModel import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager @@ -21,6 +22,7 @@ val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() val allWellResult = MutableLiveData() + val wellDetailModel = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -84,4 +86,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + wellDetailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml new file mode 100644 index 0000000..f2696ba --- /dev/null +++ b/app/src/main/res/anim/activity_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml new file mode 100644 index 0000000..1e424a5 --- /dev/null +++ b/app/src/main/res/anim/activity_out.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/alarm_selector.xml b/app/src/main/res/drawable/alarm_selector.xml deleted file mode 100644 index 39b2595..0000000 --- a/app/src/main/res/drawable/alarm_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml new file mode 100644 index 0000000..bca9c08 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml deleted file mode 100644 index dc33aab..0000000 --- a/app/src/main/res/drawable/ic_alarm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_alarm_selected.xml b/app/src/main/res/drawable/ic_alarm_selected.xml deleted file mode 100644 index 993fea6..0000000 --- a/app/src/main/res/drawable/ic_alarm_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..20e6476 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..6562ce3 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_order.xml b/app/src/main/res/drawable/ic_order.xml new file mode 100644 index 0000000..a28cdd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_order.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_order_selected.xml b/app/src/main/res/drawable/ic_order_selected.xml new file mode 100644 index 0000000..11f3e46 --- /dev/null +++ b/app/src/main/res/drawable/ic_order_selected.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/order_selector.xml b/app/src/main/res/drawable/order_selector.xml new file mode 100644 index 0000000..dc55e57 --- /dev/null +++ b/app/src/main/res/drawable/order_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml new file mode 100644 index 0000000..9d060f4 --- /dev/null +++ b/app/src/main/res/layout/activity_big_image.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_order_completed_detail.xml b/app/src/main/res/layout/activity_order_completed_detail.xml new file mode 100644 index 0000000..924f0c2 --- /dev/null +++ b/app/src/main/res/layout/activity_order_completed_detail.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_order_in_handle_detail.xml b/app/src/main/res/layout/activity_order_in_handle_detail.xml new file mode 100644 index 0000000..9bedc76 --- /dev/null +++ b/app/src/main/res/layout/activity_order_in_handle_detail.xml @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +