diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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 ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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 ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
index 03fe6e6..ca8de57 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
@@ -49,21 +49,21 @@
// it.printStackTrace()
// })
//
-// fun transferWorkOrder(id: String, userId: String) = launch({
-// loadState.value = LoadState.Loading
-// val response = RetrofitServiceManager.transferWorkOrder(id, userId)
-// val responseCode = response.separateResponseCode()
-// if (responseCode == 200) {
-// loadState.value = LoadState.Success
-// "转单成功".show()
-// } else {
-// loadState.value = LoadState.Fail
-// response.toErrorMessage().show()
-// }
-// }, {
-// loadState.value = LoadState.Fail
-// it.printStackTrace()
-// })
+fun transferWorkOrder(id: String, userId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.transferWorkOrder(id, userId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ "转单成功".show()
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show()
+ }
+}, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+})
fun completeOrder(id: String, handleMessage: String, handlePhotos: String) = launch({
loadState.value = LoadState.Loading
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
index 03fe6e6..ca8de57 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
@@ -49,21 +49,21 @@
// it.printStackTrace()
// })
//
-// fun transferWorkOrder(id: String, userId: String) = launch({
-// loadState.value = LoadState.Loading
-// val response = RetrofitServiceManager.transferWorkOrder(id, userId)
-// val responseCode = response.separateResponseCode()
-// if (responseCode == 200) {
-// loadState.value = LoadState.Success
-// "转单成功".show()
-// } else {
-// loadState.value = LoadState.Fail
-// response.toErrorMessage().show()
-// }
-// }, {
-// loadState.value = LoadState.Fail
-// it.printStackTrace()
-// })
+fun transferWorkOrder(id: String, userId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.transferWorkOrder(id, userId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ "转单成功".show()
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show()
+ }
+}, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+})
fun completeOrder(id: String, handleMessage: String, handlePhotos: String) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
new file mode 100644
index 0000000..b3071c7
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
@@ -0,0 +1,111 @@
+package com.casic.qd.smartwell.widgets
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.*
+import android.widget.*
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.initDialogLayoutParams
+import com.pengxh.app.multilib.utils.SizeUtil
+import java.util.*
+
+class SingleChoiceDialog private constructor(builder: Builder) : Dialog(
+ builder.context, R.style.UserDefinedDialogStyle
+) {
+ private val ctx: Context = builder.context
+ private val choiceItems: ArrayList = builder.actionItems
+ private val clickListener: OnSingleChoiceClickListener = builder.listener
+
+ class Builder {
+ lateinit var context: Context
+ lateinit var actionItems: ArrayList
+ lateinit var listener: OnSingleChoiceClickListener
+
+ fun setContext(context: Context): Builder {
+ this.context = context
+ return this
+ }
+
+ fun setChoiceItemTitles(items: ArrayList): Builder {
+ actionItems = items
+ return this
+ }
+
+ fun setOnSingleChoiceClickListener(listener: OnSingleChoiceClickListener): Builder {
+ this.listener = listener
+ return this
+ }
+
+ fun build(): SingleChoiceDialog {
+ return SingleChoiceDialog(this)
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f)
+ this.setContentView(R.layout.dialog_single_choice)
+ this.setCancelable(false)
+ this.setCanceledOnTouchOutside(false)
+
+ val dismissView = findViewById(R.id.dismissView)
+ dismissView.setOnClickListener { dismiss() }
+
+ val itemListView = findViewById(R.id.itemListView)
+ itemListView.adapter = object : BaseAdapter() {
+ private val inflater = LayoutInflater.from(ctx)
+ override fun getCount(): Int {
+ return choiceItems.size
+ }
+
+ override fun getItem(position: Int): Any {
+ return choiceItems[position]
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup): View {
+ val view: View
+ val holder: ItemViewHolder
+ if (convertView == null) {
+ holder = ItemViewHolder()
+ view = inflater.inflate(R.layout.item_choice_dialog, null)
+ holder.choiceItemView = view.findViewById(R.id.choiceItemView)
+ view.tag = holder
+ } else {
+ view = convertView
+ holder = view.tag as ItemViewHolder
+ }
+ if (position == choiceItems.size - 1) {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_bottom_selector)
+ } else {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_middle_selector)
+ }
+ holder.choiceItemView.text = choiceItems[position]
+ holder.choiceItemView.textSize = 18f
+ //需要动态设置item的高度
+ val param = AbsListView.LayoutParams(
+ WindowManager.LayoutParams.MATCH_PARENT,
+ SizeUtil.dp2px(ctx, 46f)
+ )
+ view.layoutParams = param
+ return view
+ }
+ }
+ itemListView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ ->
+ clickListener.onItemClick(position)
+ dismiss()
+ }
+ }
+
+ interface OnSingleChoiceClickListener {
+ fun onItemClick(position: Int)
+ }
+
+ internal class ItemViewHolder {
+ lateinit var choiceItemView: TextView
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
index 03fe6e6..ca8de57 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
@@ -49,21 +49,21 @@
// it.printStackTrace()
// })
//
-// fun transferWorkOrder(id: String, userId: String) = launch({
-// loadState.value = LoadState.Loading
-// val response = RetrofitServiceManager.transferWorkOrder(id, userId)
-// val responseCode = response.separateResponseCode()
-// if (responseCode == 200) {
-// loadState.value = LoadState.Success
-// "转单成功".show()
-// } else {
-// loadState.value = LoadState.Fail
-// response.toErrorMessage().show()
-// }
-// }, {
-// loadState.value = LoadState.Fail
-// it.printStackTrace()
-// })
+fun transferWorkOrder(id: String, userId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.transferWorkOrder(id, userId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ "转单成功".show()
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show()
+ }
+}, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+})
fun completeOrder(id: String, handleMessage: String, handlePhotos: String) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
new file mode 100644
index 0000000..b3071c7
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
@@ -0,0 +1,111 @@
+package com.casic.qd.smartwell.widgets
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.*
+import android.widget.*
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.initDialogLayoutParams
+import com.pengxh.app.multilib.utils.SizeUtil
+import java.util.*
+
+class SingleChoiceDialog private constructor(builder: Builder) : Dialog(
+ builder.context, R.style.UserDefinedDialogStyle
+) {
+ private val ctx: Context = builder.context
+ private val choiceItems: ArrayList = builder.actionItems
+ private val clickListener: OnSingleChoiceClickListener = builder.listener
+
+ class Builder {
+ lateinit var context: Context
+ lateinit var actionItems: ArrayList
+ lateinit var listener: OnSingleChoiceClickListener
+
+ fun setContext(context: Context): Builder {
+ this.context = context
+ return this
+ }
+
+ fun setChoiceItemTitles(items: ArrayList): Builder {
+ actionItems = items
+ return this
+ }
+
+ fun setOnSingleChoiceClickListener(listener: OnSingleChoiceClickListener): Builder {
+ this.listener = listener
+ return this
+ }
+
+ fun build(): SingleChoiceDialog {
+ return SingleChoiceDialog(this)
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f)
+ this.setContentView(R.layout.dialog_single_choice)
+ this.setCancelable(false)
+ this.setCanceledOnTouchOutside(false)
+
+ val dismissView = findViewById(R.id.dismissView)
+ dismissView.setOnClickListener { dismiss() }
+
+ val itemListView = findViewById(R.id.itemListView)
+ itemListView.adapter = object : BaseAdapter() {
+ private val inflater = LayoutInflater.from(ctx)
+ override fun getCount(): Int {
+ return choiceItems.size
+ }
+
+ override fun getItem(position: Int): Any {
+ return choiceItems[position]
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup): View {
+ val view: View
+ val holder: ItemViewHolder
+ if (convertView == null) {
+ holder = ItemViewHolder()
+ view = inflater.inflate(R.layout.item_choice_dialog, null)
+ holder.choiceItemView = view.findViewById(R.id.choiceItemView)
+ view.tag = holder
+ } else {
+ view = convertView
+ holder = view.tag as ItemViewHolder
+ }
+ if (position == choiceItems.size - 1) {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_bottom_selector)
+ } else {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_middle_selector)
+ }
+ holder.choiceItemView.text = choiceItems[position]
+ holder.choiceItemView.textSize = 18f
+ //需要动态设置item的高度
+ val param = AbsListView.LayoutParams(
+ WindowManager.LayoutParams.MATCH_PARENT,
+ SizeUtil.dp2px(ctx, 46f)
+ )
+ view.layoutParams = param
+ return view
+ }
+ }
+ itemListView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ ->
+ clickListener.onItemClick(position)
+ dismiss()
+ }
+ }
+
+ interface OnSingleChoiceClickListener {
+ fun onItemClick(position: Int)
+ }
+
+ internal class ItemViewHolder {
+ lateinit var choiceItemView: TextView
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml
index 20e6476..c6d8b0d 100644
--- a/app/src/main/res/drawable/ic_down.xml
+++ b/app/src/main/res/drawable/ic_down.xml
@@ -1,6 +1,6 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
index 03fe6e6..ca8de57 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
@@ -49,21 +49,21 @@
// it.printStackTrace()
// })
//
-// fun transferWorkOrder(id: String, userId: String) = launch({
-// loadState.value = LoadState.Loading
-// val response = RetrofitServiceManager.transferWorkOrder(id, userId)
-// val responseCode = response.separateResponseCode()
-// if (responseCode == 200) {
-// loadState.value = LoadState.Success
-// "转单成功".show()
-// } else {
-// loadState.value = LoadState.Fail
-// response.toErrorMessage().show()
-// }
-// }, {
-// loadState.value = LoadState.Fail
-// it.printStackTrace()
-// })
+fun transferWorkOrder(id: String, userId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.transferWorkOrder(id, userId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ "转单成功".show()
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show()
+ }
+}, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+})
fun completeOrder(id: String, handleMessage: String, handlePhotos: String) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
new file mode 100644
index 0000000..b3071c7
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
@@ -0,0 +1,111 @@
+package com.casic.qd.smartwell.widgets
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.*
+import android.widget.*
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.initDialogLayoutParams
+import com.pengxh.app.multilib.utils.SizeUtil
+import java.util.*
+
+class SingleChoiceDialog private constructor(builder: Builder) : Dialog(
+ builder.context, R.style.UserDefinedDialogStyle
+) {
+ private val ctx: Context = builder.context
+ private val choiceItems: ArrayList = builder.actionItems
+ private val clickListener: OnSingleChoiceClickListener = builder.listener
+
+ class Builder {
+ lateinit var context: Context
+ lateinit var actionItems: ArrayList
+ lateinit var listener: OnSingleChoiceClickListener
+
+ fun setContext(context: Context): Builder {
+ this.context = context
+ return this
+ }
+
+ fun setChoiceItemTitles(items: ArrayList): Builder {
+ actionItems = items
+ return this
+ }
+
+ fun setOnSingleChoiceClickListener(listener: OnSingleChoiceClickListener): Builder {
+ this.listener = listener
+ return this
+ }
+
+ fun build(): SingleChoiceDialog {
+ return SingleChoiceDialog(this)
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f)
+ this.setContentView(R.layout.dialog_single_choice)
+ this.setCancelable(false)
+ this.setCanceledOnTouchOutside(false)
+
+ val dismissView = findViewById(R.id.dismissView)
+ dismissView.setOnClickListener { dismiss() }
+
+ val itemListView = findViewById(R.id.itemListView)
+ itemListView.adapter = object : BaseAdapter() {
+ private val inflater = LayoutInflater.from(ctx)
+ override fun getCount(): Int {
+ return choiceItems.size
+ }
+
+ override fun getItem(position: Int): Any {
+ return choiceItems[position]
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup): View {
+ val view: View
+ val holder: ItemViewHolder
+ if (convertView == null) {
+ holder = ItemViewHolder()
+ view = inflater.inflate(R.layout.item_choice_dialog, null)
+ holder.choiceItemView = view.findViewById(R.id.choiceItemView)
+ view.tag = holder
+ } else {
+ view = convertView
+ holder = view.tag as ItemViewHolder
+ }
+ if (position == choiceItems.size - 1) {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_bottom_selector)
+ } else {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_middle_selector)
+ }
+ holder.choiceItemView.text = choiceItems[position]
+ holder.choiceItemView.textSize = 18f
+ //需要动态设置item的高度
+ val param = AbsListView.LayoutParams(
+ WindowManager.LayoutParams.MATCH_PARENT,
+ SizeUtil.dp2px(ctx, 46f)
+ )
+ view.layoutParams = param
+ return view
+ }
+ }
+ itemListView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ ->
+ clickListener.onItemClick(position)
+ dismiss()
+ }
+ }
+
+ interface OnSingleChoiceClickListener {
+ fun onItemClick(position: Int)
+ }
+
+ internal class ItemViewHolder {
+ lateinit var choiceItemView: TextView
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml
index 20e6476..c6d8b0d 100644
--- a/app/src/main/res/drawable/ic_down.xml
+++ b/app/src/main/res/drawable/ic_down.xml
@@ -1,6 +1,6 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
index 03fe6e6..ca8de57 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
@@ -49,21 +49,21 @@
// it.printStackTrace()
// })
//
-// fun transferWorkOrder(id: String, userId: String) = launch({
-// loadState.value = LoadState.Loading
-// val response = RetrofitServiceManager.transferWorkOrder(id, userId)
-// val responseCode = response.separateResponseCode()
-// if (responseCode == 200) {
-// loadState.value = LoadState.Success
-// "转单成功".show()
-// } else {
-// loadState.value = LoadState.Fail
-// response.toErrorMessage().show()
-// }
-// }, {
-// loadState.value = LoadState.Fail
-// it.printStackTrace()
-// })
+fun transferWorkOrder(id: String, userId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.transferWorkOrder(id, userId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ "转单成功".show()
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show()
+ }
+}, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+})
fun completeOrder(id: String, handleMessage: String, handlePhotos: String) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
new file mode 100644
index 0000000..b3071c7
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
@@ -0,0 +1,111 @@
+package com.casic.qd.smartwell.widgets
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.*
+import android.widget.*
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.initDialogLayoutParams
+import com.pengxh.app.multilib.utils.SizeUtil
+import java.util.*
+
+class SingleChoiceDialog private constructor(builder: Builder) : Dialog(
+ builder.context, R.style.UserDefinedDialogStyle
+) {
+ private val ctx: Context = builder.context
+ private val choiceItems: ArrayList = builder.actionItems
+ private val clickListener: OnSingleChoiceClickListener = builder.listener
+
+ class Builder {
+ lateinit var context: Context
+ lateinit var actionItems: ArrayList
+ lateinit var listener: OnSingleChoiceClickListener
+
+ fun setContext(context: Context): Builder {
+ this.context = context
+ return this
+ }
+
+ fun setChoiceItemTitles(items: ArrayList): Builder {
+ actionItems = items
+ return this
+ }
+
+ fun setOnSingleChoiceClickListener(listener: OnSingleChoiceClickListener): Builder {
+ this.listener = listener
+ return this
+ }
+
+ fun build(): SingleChoiceDialog {
+ return SingleChoiceDialog(this)
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f)
+ this.setContentView(R.layout.dialog_single_choice)
+ this.setCancelable(false)
+ this.setCanceledOnTouchOutside(false)
+
+ val dismissView = findViewById(R.id.dismissView)
+ dismissView.setOnClickListener { dismiss() }
+
+ val itemListView = findViewById(R.id.itemListView)
+ itemListView.adapter = object : BaseAdapter() {
+ private val inflater = LayoutInflater.from(ctx)
+ override fun getCount(): Int {
+ return choiceItems.size
+ }
+
+ override fun getItem(position: Int): Any {
+ return choiceItems[position]
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup): View {
+ val view: View
+ val holder: ItemViewHolder
+ if (convertView == null) {
+ holder = ItemViewHolder()
+ view = inflater.inflate(R.layout.item_choice_dialog, null)
+ holder.choiceItemView = view.findViewById(R.id.choiceItemView)
+ view.tag = holder
+ } else {
+ view = convertView
+ holder = view.tag as ItemViewHolder
+ }
+ if (position == choiceItems.size - 1) {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_bottom_selector)
+ } else {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_middle_selector)
+ }
+ holder.choiceItemView.text = choiceItems[position]
+ holder.choiceItemView.textSize = 18f
+ //需要动态设置item的高度
+ val param = AbsListView.LayoutParams(
+ WindowManager.LayoutParams.MATCH_PARENT,
+ SizeUtil.dp2px(ctx, 46f)
+ )
+ view.layoutParams = param
+ return view
+ }
+ }
+ itemListView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ ->
+ clickListener.onItemClick(position)
+ dismiss()
+ }
+ }
+
+ interface OnSingleChoiceClickListener {
+ fun onItemClick(position: Int)
+ }
+
+ internal class ItemViewHolder {
+ lateinit var choiceItemView: TextView
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml
index 20e6476..c6d8b0d 100644
--- a/app/src/main/res/drawable/ic_down.xml
+++ b/app/src/main/res/drawable/ic_down.xml
@@ -1,6 +1,6 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_single_choice.xml b/app/src/main/res/layout/dialog_single_choice.xml
new file mode 100644
index 0000000..292fe69
--- /dev/null
+++ b/app/src/main/res/layout/dialog_single_choice.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
index 03fe6e6..ca8de57 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
@@ -49,21 +49,21 @@
// it.printStackTrace()
// })
//
-// fun transferWorkOrder(id: String, userId: String) = launch({
-// loadState.value = LoadState.Loading
-// val response = RetrofitServiceManager.transferWorkOrder(id, userId)
-// val responseCode = response.separateResponseCode()
-// if (responseCode == 200) {
-// loadState.value = LoadState.Success
-// "转单成功".show()
-// } else {
-// loadState.value = LoadState.Fail
-// response.toErrorMessage().show()
-// }
-// }, {
-// loadState.value = LoadState.Fail
-// it.printStackTrace()
-// })
+fun transferWorkOrder(id: String, userId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.transferWorkOrder(id, userId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ "转单成功".show()
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show()
+ }
+}, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+})
fun completeOrder(id: String, handleMessage: String, handlePhotos: String) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
new file mode 100644
index 0000000..b3071c7
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
@@ -0,0 +1,111 @@
+package com.casic.qd.smartwell.widgets
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.*
+import android.widget.*
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.initDialogLayoutParams
+import com.pengxh.app.multilib.utils.SizeUtil
+import java.util.*
+
+class SingleChoiceDialog private constructor(builder: Builder) : Dialog(
+ builder.context, R.style.UserDefinedDialogStyle
+) {
+ private val ctx: Context = builder.context
+ private val choiceItems: ArrayList = builder.actionItems
+ private val clickListener: OnSingleChoiceClickListener = builder.listener
+
+ class Builder {
+ lateinit var context: Context
+ lateinit var actionItems: ArrayList
+ lateinit var listener: OnSingleChoiceClickListener
+
+ fun setContext(context: Context): Builder {
+ this.context = context
+ return this
+ }
+
+ fun setChoiceItemTitles(items: ArrayList): Builder {
+ actionItems = items
+ return this
+ }
+
+ fun setOnSingleChoiceClickListener(listener: OnSingleChoiceClickListener): Builder {
+ this.listener = listener
+ return this
+ }
+
+ fun build(): SingleChoiceDialog {
+ return SingleChoiceDialog(this)
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f)
+ this.setContentView(R.layout.dialog_single_choice)
+ this.setCancelable(false)
+ this.setCanceledOnTouchOutside(false)
+
+ val dismissView = findViewById(R.id.dismissView)
+ dismissView.setOnClickListener { dismiss() }
+
+ val itemListView = findViewById(R.id.itemListView)
+ itemListView.adapter = object : BaseAdapter() {
+ private val inflater = LayoutInflater.from(ctx)
+ override fun getCount(): Int {
+ return choiceItems.size
+ }
+
+ override fun getItem(position: Int): Any {
+ return choiceItems[position]
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup): View {
+ val view: View
+ val holder: ItemViewHolder
+ if (convertView == null) {
+ holder = ItemViewHolder()
+ view = inflater.inflate(R.layout.item_choice_dialog, null)
+ holder.choiceItemView = view.findViewById(R.id.choiceItemView)
+ view.tag = holder
+ } else {
+ view = convertView
+ holder = view.tag as ItemViewHolder
+ }
+ if (position == choiceItems.size - 1) {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_bottom_selector)
+ } else {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_middle_selector)
+ }
+ holder.choiceItemView.text = choiceItems[position]
+ holder.choiceItemView.textSize = 18f
+ //需要动态设置item的高度
+ val param = AbsListView.LayoutParams(
+ WindowManager.LayoutParams.MATCH_PARENT,
+ SizeUtil.dp2px(ctx, 46f)
+ )
+ view.layoutParams = param
+ return view
+ }
+ }
+ itemListView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ ->
+ clickListener.onItemClick(position)
+ dismiss()
+ }
+ }
+
+ interface OnSingleChoiceClickListener {
+ fun onItemClick(position: Int)
+ }
+
+ internal class ItemViewHolder {
+ lateinit var choiceItemView: TextView
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml
index 20e6476..c6d8b0d 100644
--- a/app/src/main/res/drawable/ic_down.xml
+++ b/app/src/main/res/drawable/ic_down.xml
@@ -1,6 +1,6 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_single_choice.xml b/app/src/main/res/layout/dialog_single_choice.xml
new file mode 100644
index 0000000..292fe69
--- /dev/null
+++ b/app/src/main/res/layout/dialog_single_choice.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/include_base_order_detail.xml b/app/src/main/res/layout/include_base_order_detail.xml
index 0b489ac..f87ca38 100644
--- a/app/src/main/res/layout/include_base_order_detail.xml
+++ b/app/src/main/res/layout/include_base_order_detail.xml
@@ -17,7 +17,7 @@
android:layout_alignParentEnd="true"
android:text="@string/unknown"
android:textColor="@color/redTextColor"
- android:textSize="@dimen/menuFontSize" />
+ android:textSize="@dimen/textFontSize" />
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
index 03fe6e6..ca8de57 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
@@ -49,21 +49,21 @@
// it.printStackTrace()
// })
//
-// fun transferWorkOrder(id: String, userId: String) = launch({
-// loadState.value = LoadState.Loading
-// val response = RetrofitServiceManager.transferWorkOrder(id, userId)
-// val responseCode = response.separateResponseCode()
-// if (responseCode == 200) {
-// loadState.value = LoadState.Success
-// "转单成功".show()
-// } else {
-// loadState.value = LoadState.Fail
-// response.toErrorMessage().show()
-// }
-// }, {
-// loadState.value = LoadState.Fail
-// it.printStackTrace()
-// })
+fun transferWorkOrder(id: String, userId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.transferWorkOrder(id, userId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ "转单成功".show()
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show()
+ }
+}, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+})
fun completeOrder(id: String, handleMessage: String, handlePhotos: String) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
new file mode 100644
index 0000000..b3071c7
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
@@ -0,0 +1,111 @@
+package com.casic.qd.smartwell.widgets
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.*
+import android.widget.*
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.initDialogLayoutParams
+import com.pengxh.app.multilib.utils.SizeUtil
+import java.util.*
+
+class SingleChoiceDialog private constructor(builder: Builder) : Dialog(
+ builder.context, R.style.UserDefinedDialogStyle
+) {
+ private val ctx: Context = builder.context
+ private val choiceItems: ArrayList = builder.actionItems
+ private val clickListener: OnSingleChoiceClickListener = builder.listener
+
+ class Builder {
+ lateinit var context: Context
+ lateinit var actionItems: ArrayList
+ lateinit var listener: OnSingleChoiceClickListener
+
+ fun setContext(context: Context): Builder {
+ this.context = context
+ return this
+ }
+
+ fun setChoiceItemTitles(items: ArrayList): Builder {
+ actionItems = items
+ return this
+ }
+
+ fun setOnSingleChoiceClickListener(listener: OnSingleChoiceClickListener): Builder {
+ this.listener = listener
+ return this
+ }
+
+ fun build(): SingleChoiceDialog {
+ return SingleChoiceDialog(this)
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f)
+ this.setContentView(R.layout.dialog_single_choice)
+ this.setCancelable(false)
+ this.setCanceledOnTouchOutside(false)
+
+ val dismissView = findViewById(R.id.dismissView)
+ dismissView.setOnClickListener { dismiss() }
+
+ val itemListView = findViewById(R.id.itemListView)
+ itemListView.adapter = object : BaseAdapter() {
+ private val inflater = LayoutInflater.from(ctx)
+ override fun getCount(): Int {
+ return choiceItems.size
+ }
+
+ override fun getItem(position: Int): Any {
+ return choiceItems[position]
+ }
+
+ override fun getItemId(position: Int): Long {
+ return position.toLong()
+ }
+
+ override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup): View {
+ val view: View
+ val holder: ItemViewHolder
+ if (convertView == null) {
+ holder = ItemViewHolder()
+ view = inflater.inflate(R.layout.item_choice_dialog, null)
+ holder.choiceItemView = view.findViewById(R.id.choiceItemView)
+ view.tag = holder
+ } else {
+ view = convertView
+ holder = view.tag as ItemViewHolder
+ }
+ if (position == choiceItems.size - 1) {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_bottom_selector)
+ } else {
+ holder.choiceItemView.setBackgroundResource(com.pengxh.app.multilib.R.drawable.sheet_item_middle_selector)
+ }
+ holder.choiceItemView.text = choiceItems[position]
+ holder.choiceItemView.textSize = 18f
+ //需要动态设置item的高度
+ val param = AbsListView.LayoutParams(
+ WindowManager.LayoutParams.MATCH_PARENT,
+ SizeUtil.dp2px(ctx, 46f)
+ )
+ view.layoutParams = param
+ return view
+ }
+ }
+ itemListView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ ->
+ clickListener.onItemClick(position)
+ dismiss()
+ }
+ }
+
+ interface OnSingleChoiceClickListener {
+ fun onItemClick(position: Int)
+ }
+
+ internal class ItemViewHolder {
+ lateinit var choiceItemView: TextView
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml
index 20e6476..c6d8b0d 100644
--- a/app/src/main/res/drawable/ic_down.xml
+++ b/app/src/main/res/drawable/ic_down.xml
@@ -1,6 +1,6 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_single_choice.xml b/app/src/main/res/layout/dialog_single_choice.xml
new file mode 100644
index 0000000..292fe69
--- /dev/null
+++ b/app/src/main/res/layout/dialog_single_choice.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/include_base_order_detail.xml b/app/src/main/res/layout/include_base_order_detail.xml
index 0b489ac..f87ca38 100644
--- a/app/src/main/res/layout/include_base_order_detail.xml
+++ b/app/src/main/res/layout/include_base_order_detail.xml
@@ -17,7 +17,7 @@
android:layout_alignParentEnd="true"
android:text="@string/unknown"
android:textColor="@color/redTextColor"
- android:textSize="@dimen/menuFontSize" />
+ android:textSize="@dimen/textFontSize" />
diff --git a/app/src/main/res/layout/item_choice_dialog.xml b/app/src/main/res/layout/item_choice_dialog.xml
new file mode 100644
index 0000000..a8fe9f3
--- /dev/null
+++ b/app/src/main/res/layout/item_choice_dialog.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ea77e44..59e75eb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -76,6 +76,8 @@
implementation 'com.github.bumptech.glide:glide:4.9.0'
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
+ //图片压缩
+ implementation 'top.zibin:Luban:1.1.8'
//高德地图
implementation 'com.amap.api:3dmap:7.9.1'
//返回值转换器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e361509..1e6c783 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
index f07824e..e016832 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/NineGridImageAdapter.kt
@@ -30,9 +30,14 @@
}
fun deleteImage(position: Int) {
- if (imageData.size != 0) {
- imageData.removeAt(position)
- notifyDataSetChanged()
+ try {
+ if (imageData.size > position) {
+ imageData.removeAt(position)
+ notifyItemRemoved(position)
+ notifyItemRangeChanged(position, imageData.size)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
index f36c15d..6533b92 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderCompletedAdapter.kt
@@ -43,14 +43,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
index a7fcfa8..74646d6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/OrderInHandleAdapter.kt
@@ -42,14 +42,14 @@
val rowsBean = dataRows[position]
holder.alarmContentView.text = rowsBean.alarmContentName
holder.createTimeView.text = rowsBean.createTime
- holder.wellCodeView.text = rowsBean.wellCode
- val alarmValue = rowsBean.alarmValue.toString()
- if (alarmValue.isBlank()) {
- holder.alarmValueView.text = "报警值未知"
+ holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}")
+ val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) {
+ "未知"
} else {
- holder.alarmValueView.text = alarmValue
+ rowsBean.alarmValue
}
- holder.wellLocationView.text = rowsBean.position
+ holder.alarmValueView.text = String.format("告警值:$alarmValue")
+ holder.wellLocationView.text = String.format("井位置:${rowsBean.position}")
holder.currentStateView.text =
String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index cd52782..149adf2 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -1,6 +1,8 @@
package com.casic.qd.smartwell.extensions
+import android.content.Context
import android.graphics.Color
+import android.text.TextUtils
import android.view.Gravity
import android.widget.TextView
import android.widget.Toast
@@ -8,11 +10,16 @@
import com.casic.qd.smartwell.base.BaseApplication
import com.casic.qd.smartwell.model.ErrorMessageModel
import com.casic.qd.smartwell.utils.Constant
+import com.casic.qd.smartwell.utils.FileUtils
+import com.casic.qd.smartwell.utils.OnImageCompressListener
import com.casic.qd.smartwell.utils.SaveKeyValues
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import org.json.JSONObject
+import top.zibin.luban.Luban
+import top.zibin.luban.OnCompressListener
+import java.io.File
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
@@ -108,8 +115,30 @@
fun String.combineImagePath(): String {
if (this.isEmpty()) return this
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:11304"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return "$defaultValue/static/${this.replace("\\", "/")}"
+}
+
+fun String.compressImage(context: Context, listener: OnImageCompressListener) {
+ Luban.with(context)
+ .load(this)
+ .ignoreBy(100)
+ .setTargetDir(FileUtils.compressImageDir)
+ .filter { path ->
+ !(TextUtils.isEmpty(path) || path.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/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
index 7605a10..a06c5a5 100644
--- a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -111,53 +111,55 @@
private val callback = Handler.Callback {
if (it.what == 2022061504) {
- notProcessedAdapter.notifyDataSetChanged()
- } else {
- if (dataBeans.size == 0) {
- emptyView!!.showEmptyPage("没有需要您处理的工单") {
- pageIndex = 1
- obtainWorkOrderList()
- }
+ if (isRefresh || isLoadMore) {
+ notProcessedAdapter.notifyDataSetChanged()
} else {
- emptyView!!.hide()
- notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
- notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
- notProcessedView!!.adapter = notProcessedAdapter
- notProcessedAdapter.setOnItemClickListener(object :
- OrderNotProcessedAdapter.OnItemClickListener {
- override fun onClicked(position: Int) {
- val jobId = dataBeans[position].jobId.toString()
- if (jobId.isBlank()) {
- "工单编号异常,无法查看详情".show()
- return
- }
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有需要您处理的工单") {
+ pageIndex = 1
+ obtainWorkOrderList()
+ }
+ } else {
+ emptyView!!.hide()
+ notProcessedAdapter = OrderNotProcessedAdapter(requireContext(), dataBeans)
+ notProcessedView!!.layoutManager = LinearLayoutManager(requireContext())
+ notProcessedView!!.adapter = notProcessedAdapter
+ notProcessedAdapter.setOnItemClickListener(object :
+ OrderNotProcessedAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val jobId = dataBeans[position].jobId.toString()
+ if (jobId.isBlank()) {
+ "工单编号异常,无法查看详情".show()
+ return
+ }
// requireContext().navigatePageTo(jobId)
- }
+ }
- override fun onOperationClicked(position: Int) {
- 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()
- return
+ override fun onOperationClicked(position: Int) {
+ 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()
+ return
+ }
+ operationViewModel.acceptOrder(jobId)
}
- operationViewModel.acceptOrder(jobId)
- }
- override fun onCancelClick() {
+ override fun onCancelClick() {
- }
- }).build().show()
- }
- })
+ }
+ }).build().show()
+ }
+ })
+ }
}
}
true
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
new file mode 100644
index 0000000..3f2b287
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SubordinateModel.kt
@@ -0,0 +1,17 @@
+package com.casic.qd.smartwell.model
+
+class SubordinateModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var account: String? = null
+ var attr1: String? = null
+ var deptId: String? = null
+ var id: String? = null
+ var name: String? = null
+ var phone: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 802ed6b..8b59d0d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -8,7 +8,8 @@
val USER_PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.FOREGROUND_SERVICE
)
const val PERMISSIONS_CODE = 999
@@ -36,6 +37,7 @@
R.color.color_7, R.color.color_8, R.color.color_9
)
+ const val SERVER_BASE_URL = "http://111.198.10.15:20104"
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val ACCOUNT = "account"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
index 6b40d2e..c5743d3 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/FileUtils.kt
@@ -7,9 +7,10 @@
object FileUtils {
private val context = BaseApplication.obtainInstance()
- val imageCompressPath: String
+ val compressImageDir: String
get() {
- val imageDir = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
+ val imageDir =
+ File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "CompressImage")
if (!imageDir.exists()) {
imageDir.mkdir()
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
new file mode 100644
index 0000000..53cbdb1
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/OnImageCompressListener.kt
@@ -0,0 +1,15 @@
+package com.casic.qd.smartwell.utils
+
+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/qd/smartwell/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
index 04579cf..2d9a4db 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitFactory.kt
@@ -19,8 +19,7 @@
fun createRetrofit(clazz: Class): T {
val defaultValue = SaveKeyValues.getValue(
- Constant.DEFAULT_SERVER_CONFIG,
- "http://111.198.10.15:20104"
+ Constant.DEFAULT_SERVER_CONFIG, Constant.SERVER_BASE_URL
) as String
return Retrofit.Builder()
.baseUrl(defaultValue)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index e20aa4e..a455056 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -352,4 +352,32 @@
@Header("token") token: String,
@Part file: MultipartBody.Part
): String
+
+ /**
+ * 查找同一单位下的用户
+ *
+ * @param hasMine 是否包含本人,1包含, 0不包含
+ * @param roleTips 角色类型,例:leader,member
+ */
+ @FormUrlEncoded
+ @POST("/mgr/simplelist")
+ suspend fun obtainSubordinate(
+ @Header("token") token: String,
+ @Field("hasMine") hasMine: String?,
+ @Field("roleTips") roleTips: String?
+ ): String
+
+ /**
+ * 转单
+ *
+ * @param id 工单id
+ * @param transferPerson 转单人,转给谁
+ */
+ @FormUrlEncoded
+ @POST("/job/transferJob")
+ suspend fun transferWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("transferPerson") transferPerson: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 8ce0fed..2de85eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -307,9 +307,7 @@
/**
* 完成工单
*/
- suspend fun completeOrder(
- id: String, handleMessage: String, handlePhotos: String
- ): String {
+ suspend fun completeOrder(id: String, handleMessage: String, handlePhotos: String): String {
return api.completeOrder(
AuthenticationHelper.token!!, id, handleMessage, handlePhotos
)
@@ -323,4 +321,18 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(AuthenticationHelper.token!!, imagePart)
}
+
+ /**
+ * 查找同一单位下的用户
+ */
+ suspend fun obtainSubordinate(hasMine: String?, roleTips: String?): String {
+ return api.obtainSubordinate(AuthenticationHelper.token!!, hasMine, roleTips)
+ }
+
+ /**
+ * 转单
+ */
+ suspend fun transferWorkOrder(id: String, userId: String): String {
+ return api.transferWorkOrder(AuthenticationHelper.token!!, id, userId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
index 227798b..5ce4b5c 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderCompletedDetailActivity.kt
@@ -88,13 +88,13 @@
}
//绑定窨井图片
- if (orderDetail.firstStatePhotos.toString().isBlank()) {
+ if (orderDetail.handlePhotos.toString().isBlank()) {
imageRecyclerView.visibility = View.GONE
} else {
imageRecyclerView.visibility = View.VISIBLE
//处理图片地址
val urls: ArrayList = ArrayList()
- val imageArray = orderDetail.firstStatePhotos.toString().split(",")
+ val imageArray = orderDetail.handlePhotos.toString().split(",")
imageArray.forEach { path ->
if (path.isNotBlank()) {
urls.add(path.combineImagePath())
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
index 25f30c1..090003d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderInHandleDetailActivity.kt
@@ -1,8 +1,11 @@
package com.casic.qd.smartwell.view
import android.content.Context
+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 androidx.recyclerview.widget.GridLayoutManager
@@ -12,9 +15,11 @@
import com.casic.qd.smartwell.base.BaseActivity
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.utils.*
+import com.casic.qd.smartwell.vm.AuthenticateViewModel
import com.casic.qd.smartwell.vm.OperationViewModel
import com.casic.qd.smartwell.vm.UploadImageViewModel
import com.casic.qd.smartwell.vm.WorkOrderViewModel
+import com.casic.qd.smartwell.widgets.SingleChoiceDialog
import com.casic.qd.smartwell.widgets.TimeLineBottomSheet
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
@@ -31,12 +36,13 @@
class OrderInHandleDetailActivity : BaseActivity() {
+ private val kTag = "OrderInHandleDetailActivity"
private lateinit var workOrderViewModel: WorkOrderViewModel
private lateinit var uploadImageViewModel: UploadImageViewModel
-
- // private lateinit var userViewModel: UserViewModel
+ private lateinit var authenticateViewModel: AuthenticateViewModel
private lateinit var operationViewModel: OperationViewModel
private lateinit var imageAdapter: NineGridImageAdapter
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private val context: Context = this@OrderInHandleDetailActivity
private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
@@ -57,9 +63,11 @@
workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java)
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
-// userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
+ authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java)
+ weakReferenceHandler = WeakReferenceHandler(callback)
+
workOrderViewModel.obtainWorkOrderDetail(jobId)
}
@@ -164,7 +172,7 @@
confirmPersonView.text = orderDetail.confirmJobPerson
- //维护情况 TODO 输入内容长度校验好像没用?
+ //TODO 维护情况 输入内容长度校验好像没用?
sceneEditView.setText(orderDetail.handleMessage)
confirmDateView.text = orderDetail.confirmJobTime
@@ -186,53 +194,55 @@
transferTipsView.visibility = View.GONE
}
//转单
-// transferOrderButton.setChangeAlphaWhenPress(true)
-// transferOrderButton.setOnClickListener {
-// userViewModel.obtainSubordinate("0", "leader,member")
-// }
-// userViewModel.subordinateModel.observe(this, { subordinate ->
-// if (subordinate.code == 200) {
-// val roleArray: ArrayList = ArrayList() //下级流转人员集合
-// subordinate.data?.forEach { dataBean ->
-// roleArray.add(dataBean.name.toString())
-// }
-// SingleChoiceDialog.Builder()
-// .setContext(this)
-// .setChoiceItemTitles(roleArray)
-// .setOnSingleChoiceClickListener(object :
-// SingleChoiceDialog.OnSingleChoiceClickListener {
-// override fun onItemClick(position: Int) {
-// val personBean = subordinate.data!![position]
-// AlertControlDialog.Builder()
-// .setContext(context)
-// .setTitle("操作提示")
-// .setMessage("确定要转单吗")
-// .setNegativeButton("取消")
-// .setPositiveButton("确定")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// val orderId = orderDetail.jobId.toString()
-// if (orderId.isBlank()) {
-// "工单ID异常,无法转单".show()
-// return
-// }
-// operationViewModel.transferWorkOrder(
-// id = orderId, userId = personBean.id!!
-// )
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
-// }).build().show()
-// }
-// })
+ transferOrderButton.setOnClickListener {
+ authenticateViewModel.obtainSubordinate("0", "leader,member")
+ }
+ authenticateViewModel.subordinateModel.observe(this, { subordinate ->
+ if (subordinate.code == 200) {
+ if (subordinate.data!!.isEmpty()) {
+ "无下级转单人员,无法转单".show()
+ } else {
+ val roleArray: ArrayList = ArrayList() //下级流转人员集合
+ subordinate.data?.forEach { dataBean ->
+ roleArray.add(dataBean.name.toString())
+ }
+ SingleChoiceDialog.Builder()
+ .setContext(this)
+ .setChoiceItemTitles(roleArray)
+ .setOnSingleChoiceClickListener(object :
+ SingleChoiceDialog.OnSingleChoiceClickListener {
+ override fun onItemClick(position: Int) {
+ val personBean = subordinate.data!![position]
+ AlertControlDialog.Builder()
+ .setContext(context)
+ .setTitle("操作提示")
+ .setMessage("确定要转单吗")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ val orderId = orderDetail.jobId.toString()
+ if (orderId.isBlank()) {
+ "工单ID异常,无法转单".show()
+ return
+ }
+ operationViewModel.transferWorkOrder(
+ orderId, personBean.id!!
+ )
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }).build().show()
+ }
+ }
+ })
//提交工单处理
- submitButton.setChangeAlphaWhenPress(true)
submitButton.setOnClickListener {
val orderId = orderDetail.jobId.toString()
if (orderId.isBlank()) {
@@ -314,7 +324,7 @@
imagePaths.add(url)
realPaths.add(url.combineImagePath())
}
- imageAdapter.setupImage(images = realPaths)
+ imageAdapter.setupImage(realPaths)
} else {
"最多只能上传3张图片".show()
}
@@ -325,26 +335,26 @@
})
//转单状态处理
-// operationViewModel.loadState.observe(this, {
-// when (it) {
-// is LoadState.Loading -> {
-// DialogHelper.showLoadingDialog(this, "转单中,请稍后")
-// }
-// is LoadState.Success -> {
-// DialogHelper.dismissLoadingDialog()
-// /**
-// * 转单需要刷新处理中和超时未处理的列表
-// * */
+ operationViewModel.loadState.observe(this, {
+ when (it) {
+ is LoadState.Loading -> {
+ DialogHelper.showLoadingDialog(this, "转单中,请稍后")
+ }
+ is LoadState.Success -> {
+ DialogHelper.dismissLoadingDialog()
+ /**
+ * 转单需要刷新处理中和超时未处理的列表
+ * */
// BroadcastReceiverManager.instance.sendMultiBroadcast(
// Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION
// )
-// this.finish()
-// }
-// else -> {
-// DialogHelper.dismissLoadingDialog()
-// }
-// }
-// })
+ this.finish()
+ }
+ else -> {
+ DialogHelper.dismissLoadingDialog()
+ }
+ }
+ })
//处理完成工单状态处理
operationViewModel.loadState.observe(this, {
@@ -380,9 +390,11 @@
.openCamera(SelectMimeType.ofImage())
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
- val cameraResult = result?.get(0)
- //上传图片
-// uploadImageViewModel.uploadImage(File(cameraResult))
+ if (result == null) {
+ "拍照保存失败,请重试".show()
+ return
+ }
+ analyticalSelectResults(result[0])
}
override fun onCancel() {
@@ -393,15 +405,34 @@
1 -> {
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(3)
+ .isDisplayCamera(false)
.setImageEngine(GlideLoadEngine.instance)
.forResult(object : OnResultCallbackListener {
override fun onResult(result: ArrayList?) {
showLoadingDialog(context, "图片上传中,请稍后...")
- result?.forEach {
- val file = File(it.compressPath)
- //上传图片
-// uploadImageViewModel.uploadImage(image = file)
+ if (result == null) {
+ "选择照片失败,请重试".show()
+ 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 = 2022061701
+ weakReferenceHandler.handleMessage(message)
+ }
+
+ override fun onFinish() {
+
+ }
+ }.start()
}
override fun onCancel() {
@@ -413,6 +444,37 @@
}.build().show()
}
+ private val callback = Handler.Callback {
+ if (it.what == 2022061701) {
+ 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(context, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ Log.d(kTag, "onSuccess: " + file.absolutePath)
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
private var loadingDialog: QMUITipDialog? = null
fun showLoadingDialog(context: Context?, message: String?) {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
index 659e64a..085ff5a 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderSearchResultActivity.kt
@@ -193,7 +193,7 @@
"工单ID异常,无法接单".show()
return
}
- operationViewModel.acceptWorkOrder(jobId)
+ operationViewModel.acceptOrder(jobId)
}
override fun onCancelClick() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
index 3aaa8a7..a416f02 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt
@@ -5,6 +5,7 @@
import com.casic.qd.smartwell.extensions.*
import com.casic.qd.smartwell.model.OwnerShipModel
import com.casic.qd.smartwell.model.PublicKeyModel
+import com.casic.qd.smartwell.model.SubordinateModel
import com.casic.qd.smartwell.utils.Constant
import com.casic.qd.smartwell.utils.LoadState
import com.casic.qd.smartwell.utils.SaveKeyValues
@@ -18,6 +19,7 @@
private val gson = Gson()
val keyModel = MutableLiveData()
val resultModel = MutableLiveData()
+ val subordinateModel = MutableLiveData()
fun obtainPublicKey() = launch({
loadState.value = LoadState.Loading
@@ -62,4 +64,21 @@
}, {
it.printStackTrace()
})
+
+ /**
+ * 转单下一级人员
+ * */
+ fun obtainSubordinate(hasMine: String?, roleTips: String?) = launch({
+ val response = RetrofitServiceManager.obtainSubordinate(hasMine, roleTips)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ subordinateModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show()
+ }
+ }, {
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
index 03fe6e6..ca8de57 100644
--- a/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/vm/OperationViewModel.kt
@@ -49,21 +49,21 @@
// it.printStackTrace()
// })
//
-// fun transferWorkOrder(id: String, userId: String) = launch({
-// loadState.value = LoadState.Loading
-// val response = RetrofitServiceManager.transferWorkOrder(id, userId)
-// val responseCode = response.separateResponseCode()
-// if (responseCode == 200) {
-// loadState.value = LoadState.Success
-// "转单成功".show()
-// } else {
-// loadState.value = LoadState.Fail
-// response.toErrorMessage().show()
-// }
-// }, {
-// loadState.value = LoadState.Fail
-// it.printStackTrace()
-// })
+fun transferWorkOrder(id: String, userId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.transferWorkOrder(id, userId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ "转单成功".show()
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show()
+ }
+}, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+})
fun completeOrder(id: String, handleMessage: String, handlePhotos: String) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
new file mode 100644
index 0000000..b3071c7
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/widgets/SingleChoiceDialog.kt
@@ -0,0 +1,111 @@
+package com.casic.qd.smartwell.widgets
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.*
+import android.widget.*
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.initDialogLayoutParams
+import com.pengxh.app.multilib.utils.SizeUtil
+import java.util.*
+
+class SingleChoiceDialog private constructor(builder: Builder) : Dialog(
+ builder.context, R.style.UserDefinedDialogStyle
+) {
+ private val ctx: Context = builder.context
+ private val choiceItems: ArrayList = builder.actionItems
+ private val clickListener: OnSingleChoiceClickListener = builder.listener
+
+ class Builder {
+ lateinit var context: Context
+ lateinit var actionItems: ArrayList