diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index de6ab8b..e36bd39 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,6 +50,9 @@
+
+
+
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index de6ab8b..e36bd39 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,6 +50,9 @@
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index de6ab8b..e36bd39 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,6 +50,9 @@
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
index 02b455f..ee56adf 100644
--- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
@@ -414,6 +414,7 @@
labelBean.lat = latView.text.toString()
labelBean.color = colorSelectedItem.toColor()
labelBean.remark = remarkView.text.toString()
+ labelBean.imagePath = realPaths.toJson()
DataBaseManager.get.insertTaskLabel(labelBean)
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index de6ab8b..e36bd39 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,6 +50,9 @@
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
index 02b455f..ee56adf 100644
--- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
@@ -414,6 +414,7 @@
labelBean.lat = latView.text.toString()
labelBean.color = colorSelectedItem.toColor()
labelBean.remark = remarkView.text.toString()
+ labelBean.imagePath = realPaths.toJson()
DataBaseManager.get.insertTaskLabel(labelBean)
}
diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt
index 9b791e9..8c5a880 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -40,6 +40,8 @@
import com.casic.detector.vm.VersionViewModel
import com.casic.detector.widgets.QueryMarkerDialog
import com.casic.detector.widgets.SamplePopupWindow
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.callback.OnDownloadListener
import com.pengxh.kt.lite.extensions.*
@@ -77,6 +79,7 @@
private val powerManager by lazy { getSystemService() }
private var wakeLock: PowerManager.WakeLock? = null
private var taskBean: TaskBean? = null
+ private val gson by lazy { Gson() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -524,15 +527,14 @@
}
}
- //TODO
//事件上报
private fun uploadEvent() {
if (latitude != 0.0 && longitude != 0.0) {
-// if () {
-//
-// } else {
-//
-// }
+ if (true) {
+ navigatePageTo()
+ } else {
+ "请点击[巡检]并选择执行工单!".show(this)
+ }
} else {
"定位中,请稍后再试...".show(this)
}
@@ -545,6 +547,11 @@
if (labelBeans.isNotEmpty()) {
LoadingDialogHub.show(this, "标识器补全中,请稍后...")
labelBeans.forEach { labelBean ->
+ val imagePaths = gson.fromJson>(
+ labelBean.imagePath,
+ object : TypeToken>() {}.type
+ )
+
taskViewModel.installLabel(
companyId,
labelBean.objectType,
@@ -572,7 +579,7 @@
labelBean.lat,
labelBean.color,
labelBean.remark,
- arrayListOf()
+ imagePaths
)
}
LoadingDialogHub.dismiss()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index de6ab8b..e36bd39 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,6 +50,9 @@
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
index 02b455f..ee56adf 100644
--- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
@@ -414,6 +414,7 @@
labelBean.lat = latView.text.toString()
labelBean.color = colorSelectedItem.toColor()
labelBean.remark = remarkView.text.toString()
+ labelBean.imagePath = realPaths.toJson()
DataBaseManager.get.insertTaskLabel(labelBean)
}
diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt
index 9b791e9..8c5a880 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -40,6 +40,8 @@
import com.casic.detector.vm.VersionViewModel
import com.casic.detector.widgets.QueryMarkerDialog
import com.casic.detector.widgets.SamplePopupWindow
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.callback.OnDownloadListener
import com.pengxh.kt.lite.extensions.*
@@ -77,6 +79,7 @@
private val powerManager by lazy { getSystemService() }
private var wakeLock: PowerManager.WakeLock? = null
private var taskBean: TaskBean? = null
+ private val gson by lazy { Gson() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -524,15 +527,14 @@
}
}
- //TODO
//事件上报
private fun uploadEvent() {
if (latitude != 0.0 && longitude != 0.0) {
-// if () {
-//
-// } else {
-//
-// }
+ if (true) {
+ navigatePageTo()
+ } else {
+ "请点击[巡检]并选择执行工单!".show(this)
+ }
} else {
"定位中,请稍后再试...".show(this)
}
@@ -545,6 +547,11 @@
if (labelBeans.isNotEmpty()) {
LoadingDialogHub.show(this, "标识器补全中,请稍后...")
labelBeans.forEach { labelBean ->
+ val imagePaths = gson.fromJson>(
+ labelBean.imagePath,
+ object : TypeToken>() {}.type
+ )
+
taskViewModel.installLabel(
companyId,
labelBean.objectType,
@@ -572,7 +579,7 @@
labelBean.lat,
labelBean.color,
labelBean.remark,
- arrayListOf()
+ imagePaths
)
}
LoadingDialogHub.dismiss()
diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
new file mode 100644
index 0000000..cf8d46b
--- /dev/null
+++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
@@ -0,0 +1,150 @@
+package com.casic.detector.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
+import com.casic.detector.R
+import com.casic.detector.adapter.EditableImageAdapter
+import com.casic.detector.callback.ILocationListener
+import com.casic.detector.callback.OnImageCompressListener
+import com.casic.detector.extensions.compressImage
+import com.casic.detector.model.EventModel
+import com.casic.detector.utils.LoadingDialogHub
+import com.casic.detector.utils.LocaleConstant
+import com.casic.detector.utils.LocationHub
+import com.casic.detector.vm.TaskViewModel
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.pengxh.kt.lite.extensions.*
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_upload_event.*
+import kotlinx.android.synthetic.main.include_install_label_open_camera.*
+import java.io.File
+
+@SuppressLint("SetTextI18n")
+class UploadEventActivity : AppCompatActivity() {
+
+ private val context: Context = this@UploadEventActivity
+ private lateinit var imageAdapter: EditableImageAdapter
+ private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private lateinit var taskViewModel: TaskViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_upload_event)
+
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ window.setGravity(Gravity.CENTER)
+ val params = window.attributes
+ params.width = ((getScreenWidth() * 0.9).toInt())
+ params.height = ((getScreenHeight() * 0.7).toInt())
+ window.attributes = params
+
+ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String
+ userNameView.text = userName
+
+ uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ LocationHub.getCurrentLocation(this, object : ILocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ if (location != null) {
+ lngView.text = "${location.longitude}"
+ latView.text = "${location.latitude}"
+ } else {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ }
+ })
+
+ imageAdapter = EditableImageAdapter(this, 3, 3f)
+ addImageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
+ override fun onAddImageClick() {
+ takePicture()
+ }
+
+ override fun onItemClick(position: Int) {
+ if (realPaths[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(context)
+ } else {
+ context.navigatePageTo(position, realPaths)
+ }
+ }
+
+ override fun onItemLongClick(view: View?, position: Int) {
+ imageAdapter.deleteImage(position)
+ }
+ })
+
+ cancelButton.setOnClickListener { finish() }
+
+ taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
+ taskViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "事件上报中,请稍后...")
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ finish()
+ }
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ uploadEventButton.setOnClickListener {
+ if (eventDescriptionView.text.isNullOrBlank()) {
+ "请输入事件描述!".show(this)
+ return@setOnClickListener
+ }
+
+ val eventModel = EventModel()
+ eventModel.description = eventDescriptionView.text.toString()
+ eventModel.createTime = uploadTimeView.text.toString()
+
+ eventModel.latitude = lngView.text.toString().toDouble()
+ eventModel.longitude = latView.text.toString().toDouble()
+
+ taskViewModel.uploadEvent("", eventModel.toJson(), realPaths)
+ }
+ }
+
+ private fun takePicture() {
+ PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(context)
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ realPaths.add(file.absolutePath)
+ imageAdapter.setupImage(realPaths)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index de6ab8b..e36bd39 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,6 +50,9 @@
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
index 02b455f..ee56adf 100644
--- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
@@ -414,6 +414,7 @@
labelBean.lat = latView.text.toString()
labelBean.color = colorSelectedItem.toColor()
labelBean.remark = remarkView.text.toString()
+ labelBean.imagePath = realPaths.toJson()
DataBaseManager.get.insertTaskLabel(labelBean)
}
diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt
index 9b791e9..8c5a880 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -40,6 +40,8 @@
import com.casic.detector.vm.VersionViewModel
import com.casic.detector.widgets.QueryMarkerDialog
import com.casic.detector.widgets.SamplePopupWindow
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.callback.OnDownloadListener
import com.pengxh.kt.lite.extensions.*
@@ -77,6 +79,7 @@
private val powerManager by lazy { getSystemService() }
private var wakeLock: PowerManager.WakeLock? = null
private var taskBean: TaskBean? = null
+ private val gson by lazy { Gson() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -524,15 +527,14 @@
}
}
- //TODO
//事件上报
private fun uploadEvent() {
if (latitude != 0.0 && longitude != 0.0) {
-// if () {
-//
-// } else {
-//
-// }
+ if (true) {
+ navigatePageTo()
+ } else {
+ "请点击[巡检]并选择执行工单!".show(this)
+ }
} else {
"定位中,请稍后再试...".show(this)
}
@@ -545,6 +547,11 @@
if (labelBeans.isNotEmpty()) {
LoadingDialogHub.show(this, "标识器补全中,请稍后...")
labelBeans.forEach { labelBean ->
+ val imagePaths = gson.fromJson>(
+ labelBean.imagePath,
+ object : TypeToken>() {}.type
+ )
+
taskViewModel.installLabel(
companyId,
labelBean.objectType,
@@ -572,7 +579,7 @@
labelBean.lat,
labelBean.color,
labelBean.remark,
- arrayListOf()
+ imagePaths
)
}
LoadingDialogHub.dismiss()
diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
new file mode 100644
index 0000000..cf8d46b
--- /dev/null
+++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
@@ -0,0 +1,150 @@
+package com.casic.detector.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
+import com.casic.detector.R
+import com.casic.detector.adapter.EditableImageAdapter
+import com.casic.detector.callback.ILocationListener
+import com.casic.detector.callback.OnImageCompressListener
+import com.casic.detector.extensions.compressImage
+import com.casic.detector.model.EventModel
+import com.casic.detector.utils.LoadingDialogHub
+import com.casic.detector.utils.LocaleConstant
+import com.casic.detector.utils.LocationHub
+import com.casic.detector.vm.TaskViewModel
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.pengxh.kt.lite.extensions.*
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_upload_event.*
+import kotlinx.android.synthetic.main.include_install_label_open_camera.*
+import java.io.File
+
+@SuppressLint("SetTextI18n")
+class UploadEventActivity : AppCompatActivity() {
+
+ private val context: Context = this@UploadEventActivity
+ private lateinit var imageAdapter: EditableImageAdapter
+ private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private lateinit var taskViewModel: TaskViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_upload_event)
+
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ window.setGravity(Gravity.CENTER)
+ val params = window.attributes
+ params.width = ((getScreenWidth() * 0.9).toInt())
+ params.height = ((getScreenHeight() * 0.7).toInt())
+ window.attributes = params
+
+ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String
+ userNameView.text = userName
+
+ uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ LocationHub.getCurrentLocation(this, object : ILocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ if (location != null) {
+ lngView.text = "${location.longitude}"
+ latView.text = "${location.latitude}"
+ } else {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ }
+ })
+
+ imageAdapter = EditableImageAdapter(this, 3, 3f)
+ addImageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
+ override fun onAddImageClick() {
+ takePicture()
+ }
+
+ override fun onItemClick(position: Int) {
+ if (realPaths[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(context)
+ } else {
+ context.navigatePageTo(position, realPaths)
+ }
+ }
+
+ override fun onItemLongClick(view: View?, position: Int) {
+ imageAdapter.deleteImage(position)
+ }
+ })
+
+ cancelButton.setOnClickListener { finish() }
+
+ taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
+ taskViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "事件上报中,请稍后...")
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ finish()
+ }
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ uploadEventButton.setOnClickListener {
+ if (eventDescriptionView.text.isNullOrBlank()) {
+ "请输入事件描述!".show(this)
+ return@setOnClickListener
+ }
+
+ val eventModel = EventModel()
+ eventModel.description = eventDescriptionView.text.toString()
+ eventModel.createTime = uploadTimeView.text.toString()
+
+ eventModel.latitude = lngView.text.toString().toDouble()
+ eventModel.longitude = latView.text.toString().toDouble()
+
+ taskViewModel.uploadEvent("", eventModel.toJson(), realPaths)
+ }
+ }
+
+ private fun takePicture() {
+ PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(context)
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ realPaths.add(file.absolutePath)
+ imageAdapter.setupImage(realPaths)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
index 2475f0d..e22fef1 100644
--- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
+++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
@@ -148,4 +148,18 @@
loadState.value = LoadState.Fail
it.convertChinese().show(BaseApplication.get())
})
+
+ fun uploadEvent(taskId: String, event: String, realPaths: ArrayList) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths)
+ if (response.separateResponseState()) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.convertChinese().show(BaseApplication.get())
+ })
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index de6ab8b..e36bd39 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,6 +50,9 @@
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
index 02b455f..ee56adf 100644
--- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
@@ -414,6 +414,7 @@
labelBean.lat = latView.text.toString()
labelBean.color = colorSelectedItem.toColor()
labelBean.remark = remarkView.text.toString()
+ labelBean.imagePath = realPaths.toJson()
DataBaseManager.get.insertTaskLabel(labelBean)
}
diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt
index 9b791e9..8c5a880 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -40,6 +40,8 @@
import com.casic.detector.vm.VersionViewModel
import com.casic.detector.widgets.QueryMarkerDialog
import com.casic.detector.widgets.SamplePopupWindow
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.callback.OnDownloadListener
import com.pengxh.kt.lite.extensions.*
@@ -77,6 +79,7 @@
private val powerManager by lazy { getSystemService() }
private var wakeLock: PowerManager.WakeLock? = null
private var taskBean: TaskBean? = null
+ private val gson by lazy { Gson() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -524,15 +527,14 @@
}
}
- //TODO
//事件上报
private fun uploadEvent() {
if (latitude != 0.0 && longitude != 0.0) {
-// if () {
-//
-// } else {
-//
-// }
+ if (true) {
+ navigatePageTo()
+ } else {
+ "请点击[巡检]并选择执行工单!".show(this)
+ }
} else {
"定位中,请稍后再试...".show(this)
}
@@ -545,6 +547,11 @@
if (labelBeans.isNotEmpty()) {
LoadingDialogHub.show(this, "标识器补全中,请稍后...")
labelBeans.forEach { labelBean ->
+ val imagePaths = gson.fromJson>(
+ labelBean.imagePath,
+ object : TypeToken>() {}.type
+ )
+
taskViewModel.installLabel(
companyId,
labelBean.objectType,
@@ -572,7 +579,7 @@
labelBean.lat,
labelBean.color,
labelBean.remark,
- arrayListOf()
+ imagePaths
)
}
LoadingDialogHub.dismiss()
diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
new file mode 100644
index 0000000..cf8d46b
--- /dev/null
+++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
@@ -0,0 +1,150 @@
+package com.casic.detector.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
+import com.casic.detector.R
+import com.casic.detector.adapter.EditableImageAdapter
+import com.casic.detector.callback.ILocationListener
+import com.casic.detector.callback.OnImageCompressListener
+import com.casic.detector.extensions.compressImage
+import com.casic.detector.model.EventModel
+import com.casic.detector.utils.LoadingDialogHub
+import com.casic.detector.utils.LocaleConstant
+import com.casic.detector.utils.LocationHub
+import com.casic.detector.vm.TaskViewModel
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.pengxh.kt.lite.extensions.*
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_upload_event.*
+import kotlinx.android.synthetic.main.include_install_label_open_camera.*
+import java.io.File
+
+@SuppressLint("SetTextI18n")
+class UploadEventActivity : AppCompatActivity() {
+
+ private val context: Context = this@UploadEventActivity
+ private lateinit var imageAdapter: EditableImageAdapter
+ private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private lateinit var taskViewModel: TaskViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_upload_event)
+
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ window.setGravity(Gravity.CENTER)
+ val params = window.attributes
+ params.width = ((getScreenWidth() * 0.9).toInt())
+ params.height = ((getScreenHeight() * 0.7).toInt())
+ window.attributes = params
+
+ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String
+ userNameView.text = userName
+
+ uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ LocationHub.getCurrentLocation(this, object : ILocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ if (location != null) {
+ lngView.text = "${location.longitude}"
+ latView.text = "${location.latitude}"
+ } else {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ }
+ })
+
+ imageAdapter = EditableImageAdapter(this, 3, 3f)
+ addImageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
+ override fun onAddImageClick() {
+ takePicture()
+ }
+
+ override fun onItemClick(position: Int) {
+ if (realPaths[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(context)
+ } else {
+ context.navigatePageTo(position, realPaths)
+ }
+ }
+
+ override fun onItemLongClick(view: View?, position: Int) {
+ imageAdapter.deleteImage(position)
+ }
+ })
+
+ cancelButton.setOnClickListener { finish() }
+
+ taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
+ taskViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "事件上报中,请稍后...")
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ finish()
+ }
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ uploadEventButton.setOnClickListener {
+ if (eventDescriptionView.text.isNullOrBlank()) {
+ "请输入事件描述!".show(this)
+ return@setOnClickListener
+ }
+
+ val eventModel = EventModel()
+ eventModel.description = eventDescriptionView.text.toString()
+ eventModel.createTime = uploadTimeView.text.toString()
+
+ eventModel.latitude = lngView.text.toString().toDouble()
+ eventModel.longitude = latView.text.toString().toDouble()
+
+ taskViewModel.uploadEvent("", eventModel.toJson(), realPaths)
+ }
+ }
+
+ private fun takePicture() {
+ PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(context)
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ realPaths.add(file.absolutePath)
+ imageAdapter.setupImage(realPaths)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
index 2475f0d..e22fef1 100644
--- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
+++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
@@ -148,4 +148,18 @@
loadState.value = LoadState.Fail
it.convertChinese().show(BaseApplication.get())
})
+
+ fun uploadEvent(taskId: String, event: String, realPaths: ArrayList) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths)
+ if (response.separateResponseState()) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.convertChinese().show(BaseApplication.get())
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_install_label.xml b/app/src/main/res/layout/activity_install_label.xml
index e191ec8..5b459eb 100644
--- a/app/src/main/res/layout/activity_install_label.xml
+++ b/app/src/main/res/layout/activity_install_label.xml
@@ -45,7 +45,6 @@
android:background="#BFBFBF" />
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
index 02b455f..ee56adf 100644
--- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
@@ -414,6 +414,7 @@
labelBean.lat = latView.text.toString()
labelBean.color = colorSelectedItem.toColor()
labelBean.remark = remarkView.text.toString()
+ labelBean.imagePath = realPaths.toJson()
DataBaseManager.get.insertTaskLabel(labelBean)
}
diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt
index 9b791e9..8c5a880 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -40,6 +40,8 @@
import com.casic.detector.vm.VersionViewModel
import com.casic.detector.widgets.QueryMarkerDialog
import com.casic.detector.widgets.SamplePopupWindow
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.callback.OnDownloadListener
import com.pengxh.kt.lite.extensions.*
@@ -77,6 +79,7 @@
private val powerManager by lazy { getSystemService() }
private var wakeLock: PowerManager.WakeLock? = null
private var taskBean: TaskBean? = null
+ private val gson by lazy { Gson() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -524,15 +527,14 @@
}
}
- //TODO
//事件上报
private fun uploadEvent() {
if (latitude != 0.0 && longitude != 0.0) {
-// if () {
-//
-// } else {
-//
-// }
+ if (true) {
+ navigatePageTo()
+ } else {
+ "请点击[巡检]并选择执行工单!".show(this)
+ }
} else {
"定位中,请稍后再试...".show(this)
}
@@ -545,6 +547,11 @@
if (labelBeans.isNotEmpty()) {
LoadingDialogHub.show(this, "标识器补全中,请稍后...")
labelBeans.forEach { labelBean ->
+ val imagePaths = gson.fromJson>(
+ labelBean.imagePath,
+ object : TypeToken>() {}.type
+ )
+
taskViewModel.installLabel(
companyId,
labelBean.objectType,
@@ -572,7 +579,7 @@
labelBean.lat,
labelBean.color,
labelBean.remark,
- arrayListOf()
+ imagePaths
)
}
LoadingDialogHub.dismiss()
diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
new file mode 100644
index 0000000..cf8d46b
--- /dev/null
+++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
@@ -0,0 +1,150 @@
+package com.casic.detector.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
+import com.casic.detector.R
+import com.casic.detector.adapter.EditableImageAdapter
+import com.casic.detector.callback.ILocationListener
+import com.casic.detector.callback.OnImageCompressListener
+import com.casic.detector.extensions.compressImage
+import com.casic.detector.model.EventModel
+import com.casic.detector.utils.LoadingDialogHub
+import com.casic.detector.utils.LocaleConstant
+import com.casic.detector.utils.LocationHub
+import com.casic.detector.vm.TaskViewModel
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.pengxh.kt.lite.extensions.*
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_upload_event.*
+import kotlinx.android.synthetic.main.include_install_label_open_camera.*
+import java.io.File
+
+@SuppressLint("SetTextI18n")
+class UploadEventActivity : AppCompatActivity() {
+
+ private val context: Context = this@UploadEventActivity
+ private lateinit var imageAdapter: EditableImageAdapter
+ private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private lateinit var taskViewModel: TaskViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_upload_event)
+
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ window.setGravity(Gravity.CENTER)
+ val params = window.attributes
+ params.width = ((getScreenWidth() * 0.9).toInt())
+ params.height = ((getScreenHeight() * 0.7).toInt())
+ window.attributes = params
+
+ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String
+ userNameView.text = userName
+
+ uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ LocationHub.getCurrentLocation(this, object : ILocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ if (location != null) {
+ lngView.text = "${location.longitude}"
+ latView.text = "${location.latitude}"
+ } else {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ }
+ })
+
+ imageAdapter = EditableImageAdapter(this, 3, 3f)
+ addImageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
+ override fun onAddImageClick() {
+ takePicture()
+ }
+
+ override fun onItemClick(position: Int) {
+ if (realPaths[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(context)
+ } else {
+ context.navigatePageTo(position, realPaths)
+ }
+ }
+
+ override fun onItemLongClick(view: View?, position: Int) {
+ imageAdapter.deleteImage(position)
+ }
+ })
+
+ cancelButton.setOnClickListener { finish() }
+
+ taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
+ taskViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "事件上报中,请稍后...")
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ finish()
+ }
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ uploadEventButton.setOnClickListener {
+ if (eventDescriptionView.text.isNullOrBlank()) {
+ "请输入事件描述!".show(this)
+ return@setOnClickListener
+ }
+
+ val eventModel = EventModel()
+ eventModel.description = eventDescriptionView.text.toString()
+ eventModel.createTime = uploadTimeView.text.toString()
+
+ eventModel.latitude = lngView.text.toString().toDouble()
+ eventModel.longitude = latView.text.toString().toDouble()
+
+ taskViewModel.uploadEvent("", eventModel.toJson(), realPaths)
+ }
+ }
+
+ private fun takePicture() {
+ PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(context)
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ realPaths.add(file.absolutePath)
+ imageAdapter.setupImage(realPaths)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
index 2475f0d..e22fef1 100644
--- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
+++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
@@ -148,4 +148,18 @@
loadState.value = LoadState.Fail
it.convertChinese().show(BaseApplication.get())
})
+
+ fun uploadEvent(taskId: String, event: String, realPaths: ArrayList) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths)
+ if (response.separateResponseState()) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.convertChinese().show(BaseApplication.get())
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_install_label.xml b/app/src/main/res/layout/activity_install_label.xml
index e191ec8..5b459eb 100644
--- a/app/src/main/res/layout/activity_install_label.xml
+++ b/app/src/main/res/layout/activity_install_label.xml
@@ -45,7 +45,6 @@
android:background="#BFBFBF" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
index 02b455f..ee56adf 100644
--- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
@@ -414,6 +414,7 @@
labelBean.lat = latView.text.toString()
labelBean.color = colorSelectedItem.toColor()
labelBean.remark = remarkView.text.toString()
+ labelBean.imagePath = realPaths.toJson()
DataBaseManager.get.insertTaskLabel(labelBean)
}
diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt
index 9b791e9..8c5a880 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -40,6 +40,8 @@
import com.casic.detector.vm.VersionViewModel
import com.casic.detector.widgets.QueryMarkerDialog
import com.casic.detector.widgets.SamplePopupWindow
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.callback.OnDownloadListener
import com.pengxh.kt.lite.extensions.*
@@ -77,6 +79,7 @@
private val powerManager by lazy { getSystemService() }
private var wakeLock: PowerManager.WakeLock? = null
private var taskBean: TaskBean? = null
+ private val gson by lazy { Gson() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -524,15 +527,14 @@
}
}
- //TODO
//事件上报
private fun uploadEvent() {
if (latitude != 0.0 && longitude != 0.0) {
-// if () {
-//
-// } else {
-//
-// }
+ if (true) {
+ navigatePageTo()
+ } else {
+ "请点击[巡检]并选择执行工单!".show(this)
+ }
} else {
"定位中,请稍后再试...".show(this)
}
@@ -545,6 +547,11 @@
if (labelBeans.isNotEmpty()) {
LoadingDialogHub.show(this, "标识器补全中,请稍后...")
labelBeans.forEach { labelBean ->
+ val imagePaths = gson.fromJson>(
+ labelBean.imagePath,
+ object : TypeToken>() {}.type
+ )
+
taskViewModel.installLabel(
companyId,
labelBean.objectType,
@@ -572,7 +579,7 @@
labelBean.lat,
labelBean.color,
labelBean.remark,
- arrayListOf()
+ imagePaths
)
}
LoadingDialogHub.dismiss()
diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
new file mode 100644
index 0000000..cf8d46b
--- /dev/null
+++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
@@ -0,0 +1,150 @@
+package com.casic.detector.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
+import com.casic.detector.R
+import com.casic.detector.adapter.EditableImageAdapter
+import com.casic.detector.callback.ILocationListener
+import com.casic.detector.callback.OnImageCompressListener
+import com.casic.detector.extensions.compressImage
+import com.casic.detector.model.EventModel
+import com.casic.detector.utils.LoadingDialogHub
+import com.casic.detector.utils.LocaleConstant
+import com.casic.detector.utils.LocationHub
+import com.casic.detector.vm.TaskViewModel
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.pengxh.kt.lite.extensions.*
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_upload_event.*
+import kotlinx.android.synthetic.main.include_install_label_open_camera.*
+import java.io.File
+
+@SuppressLint("SetTextI18n")
+class UploadEventActivity : AppCompatActivity() {
+
+ private val context: Context = this@UploadEventActivity
+ private lateinit var imageAdapter: EditableImageAdapter
+ private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private lateinit var taskViewModel: TaskViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_upload_event)
+
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ window.setGravity(Gravity.CENTER)
+ val params = window.attributes
+ params.width = ((getScreenWidth() * 0.9).toInt())
+ params.height = ((getScreenHeight() * 0.7).toInt())
+ window.attributes = params
+
+ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String
+ userNameView.text = userName
+
+ uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ LocationHub.getCurrentLocation(this, object : ILocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ if (location != null) {
+ lngView.text = "${location.longitude}"
+ latView.text = "${location.latitude}"
+ } else {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ }
+ })
+
+ imageAdapter = EditableImageAdapter(this, 3, 3f)
+ addImageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
+ override fun onAddImageClick() {
+ takePicture()
+ }
+
+ override fun onItemClick(position: Int) {
+ if (realPaths[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(context)
+ } else {
+ context.navigatePageTo(position, realPaths)
+ }
+ }
+
+ override fun onItemLongClick(view: View?, position: Int) {
+ imageAdapter.deleteImage(position)
+ }
+ })
+
+ cancelButton.setOnClickListener { finish() }
+
+ taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
+ taskViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "事件上报中,请稍后...")
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ finish()
+ }
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ uploadEventButton.setOnClickListener {
+ if (eventDescriptionView.text.isNullOrBlank()) {
+ "请输入事件描述!".show(this)
+ return@setOnClickListener
+ }
+
+ val eventModel = EventModel()
+ eventModel.description = eventDescriptionView.text.toString()
+ eventModel.createTime = uploadTimeView.text.toString()
+
+ eventModel.latitude = lngView.text.toString().toDouble()
+ eventModel.longitude = latView.text.toString().toDouble()
+
+ taskViewModel.uploadEvent("", eventModel.toJson(), realPaths)
+ }
+ }
+
+ private fun takePicture() {
+ PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(context)
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ realPaths.add(file.absolutePath)
+ imageAdapter.setupImage(realPaths)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
index 2475f0d..e22fef1 100644
--- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
+++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
@@ -148,4 +148,18 @@
loadState.value = LoadState.Fail
it.convertChinese().show(BaseApplication.get())
})
+
+ fun uploadEvent(taskId: String, event: String, realPaths: ArrayList) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths)
+ if (response.separateResponseState()) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.convertChinese().show(BaseApplication.get())
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_install_label.xml b/app/src/main/res/layout/activity_install_label.xml
index e191ec8..5b459eb 100644
--- a/app/src/main/res/layout/activity_install_label.xml
+++ b/app/src/main/res/layout/activity_install_label.xml
@@ -45,7 +45,6 @@
android:background="#BFBFBF" />
+ android:layout_height="@dimen/titleViewHeight">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/include_install_label_identifier.xml b/app/src/main/res/layout/include_install_label_identifier.xml
index d166fd0..554b290 100644
--- a/app/src/main/res/layout/include_install_label_identifier.xml
+++ b/app/src/main/res/layout/include_install_label_identifier.xml
@@ -40,7 +40,8 @@
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+
,
+ @PartMap jsonMarker: Map,
+ @Part fileBuffer1: MultipartBody.Part?,
+ @Part fileBuffer2: MultipartBody.Part?,
+ @Part fileBuffer3: MultipartBody.Part?
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
index 6e6f1ae..ab92452 100644
--- a/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/detector/retrofit/RetrofitServiceManager.kt
@@ -160,4 +160,44 @@
}
}
}
+
+ /**
+ * 上报事件
+ * Multipart上传图片,文件,带多参数上传
+ */
+ suspend fun uploadEvent(taskId: String, event: String, realPaths: ArrayList): String {
+ val taskIdMap = HashMap()
+ taskIdMap["taskId"] = taskId.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val eventMap = HashMap()
+ eventMap["data"] = event.toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ val multiParts = ArrayList()
+ realPaths.forEachIndexed { index, s ->
+ val file = File(s)
+ val fileMultipart = MultipartBody.Part.createFormData(
+ "fileBuffer${index + 1}", file.name, file.asRequestBody("image/png".toMediaType())
+ )
+ multiParts.add(fileMultipart)
+ }
+
+ return when (multiParts.size) {
+ 3 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], multiParts[2])
+ }
+ 2 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], multiParts[1], null)
+ }
+ 1 -> {
+ api.uploadEvent(taskIdMap, eventMap, multiParts[0], null, null)
+ }
+ else -> {
+ api.uploadEvent(taskIdMap, eventMap, null, null, null)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
index 02b455f..ee56adf 100644
--- a/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/InstallLabelActivity.kt
@@ -414,6 +414,7 @@
labelBean.lat = latView.text.toString()
labelBean.color = colorSelectedItem.toColor()
labelBean.remark = remarkView.text.toString()
+ labelBean.imagePath = realPaths.toJson()
DataBaseManager.get.insertTaskLabel(labelBean)
}
diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt
index 9b791e9..8c5a880 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -40,6 +40,8 @@
import com.casic.detector.vm.VersionViewModel
import com.casic.detector.widgets.QueryMarkerDialog
import com.casic.detector.widgets.SamplePopupWindow
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.callback.OnDownloadListener
import com.pengxh.kt.lite.extensions.*
@@ -77,6 +79,7 @@
private val powerManager by lazy { getSystemService() }
private var wakeLock: PowerManager.WakeLock? = null
private var taskBean: TaskBean? = null
+ private val gson by lazy { Gson() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -524,15 +527,14 @@
}
}
- //TODO
//事件上报
private fun uploadEvent() {
if (latitude != 0.0 && longitude != 0.0) {
-// if () {
-//
-// } else {
-//
-// }
+ if (true) {
+ navigatePageTo()
+ } else {
+ "请点击[巡检]并选择执行工单!".show(this)
+ }
} else {
"定位中,请稍后再试...".show(this)
}
@@ -545,6 +547,11 @@
if (labelBeans.isNotEmpty()) {
LoadingDialogHub.show(this, "标识器补全中,请稍后...")
labelBeans.forEach { labelBean ->
+ val imagePaths = gson.fromJson>(
+ labelBean.imagePath,
+ object : TypeToken>() {}.type
+ )
+
taskViewModel.installLabel(
companyId,
labelBean.objectType,
@@ -572,7 +579,7 @@
labelBean.lat,
labelBean.color,
labelBean.remark,
- arrayListOf()
+ imagePaths
)
}
LoadingDialogHub.dismiss()
diff --git a/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
new file mode 100644
index 0000000..cf8d46b
--- /dev/null
+++ b/app/src/main/java/com/casic/detector/view/UploadEventActivity.kt
@@ -0,0 +1,150 @@
+package com.casic.detector.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
+import com.casic.detector.R
+import com.casic.detector.adapter.EditableImageAdapter
+import com.casic.detector.callback.ILocationListener
+import com.casic.detector.callback.OnImageCompressListener
+import com.casic.detector.extensions.compressImage
+import com.casic.detector.model.EventModel
+import com.casic.detector.utils.LoadingDialogHub
+import com.casic.detector.utils.LocaleConstant
+import com.casic.detector.utils.LocationHub
+import com.casic.detector.vm.TaskViewModel
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.pengxh.kt.lite.extensions.*
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_upload_event.*
+import kotlinx.android.synthetic.main.include_install_label_open_camera.*
+import java.io.File
+
+@SuppressLint("SetTextI18n")
+class UploadEventActivity : AppCompatActivity() {
+
+ private val context: Context = this@UploadEventActivity
+ private lateinit var imageAdapter: EditableImageAdapter
+ private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private lateinit var taskViewModel: TaskViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_upload_event)
+
+ window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ window.decorView.setBackgroundColor(Color.TRANSPARENT)
+ window.setGravity(Gravity.CENTER)
+ val params = window.attributes
+ params.width = ((getScreenWidth() * 0.9).toInt())
+ params.height = ((getScreenHeight() * 0.7).toInt())
+ window.attributes = params
+
+ val userName = SaveKeyValues.getValue(LocaleConstant.USER_NAME, "") as String
+ userNameView.text = userName
+
+ uploadTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ LocationHub.getCurrentLocation(this, object : ILocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ if (location != null) {
+ lngView.text = "${location.longitude}"
+ latView.text = "${location.latitude}"
+ } else {
+ "当前位置信号差,无法获取定位".show(context)
+ }
+ }
+ })
+
+ imageAdapter = EditableImageAdapter(this, 3, 3f)
+ addImageRecyclerView.adapter = imageAdapter
+ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
+ override fun onAddImageClick() {
+ takePicture()
+ }
+
+ override fun onItemClick(position: Int) {
+ if (realPaths[position].isEmpty()) {
+ "图片加载失败,无法查看大图".show(context)
+ } else {
+ context.navigatePageTo(position, realPaths)
+ }
+ }
+
+ override fun onItemLongClick(view: View?, position: Int) {
+ imageAdapter.deleteImage(position)
+ }
+ })
+
+ cancelButton.setOnClickListener { finish() }
+
+ taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
+ taskViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "事件上报中,请稍后...")
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ finish()
+ }
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ uploadEventButton.setOnClickListener {
+ if (eventDescriptionView.text.isNullOrBlank()) {
+ "请输入事件描述!".show(this)
+ return@setOnClickListener
+ }
+
+ val eventModel = EventModel()
+ eventModel.description = eventDescriptionView.text.toString()
+ eventModel.createTime = uploadTimeView.text.toString()
+
+ eventModel.latitude = lngView.text.toString().toDouble()
+ eventModel.longitude = latView.text.toString().toDouble()
+
+ taskViewModel.uploadEvent("", eventModel.toJson(), realPaths)
+ }
+ }
+
+ private fun takePicture() {
+ PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(context)
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ realPaths.add(file.absolutePath)
+ imageAdapter.setupImage(realPaths)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
index 2475f0d..e22fef1 100644
--- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
+++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt
@@ -148,4 +148,18 @@
loadState.value = LoadState.Fail
it.convertChinese().show(BaseApplication.get())
})
+
+ fun uploadEvent(taskId: String, event: String, realPaths: ArrayList) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths)
+ if (response.separateResponseState()) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.convertChinese().show(BaseApplication.get())
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_install_label.xml b/app/src/main/res/layout/activity_install_label.xml
index e191ec8..5b459eb 100644
--- a/app/src/main/res/layout/activity_install_label.xml
+++ b/app/src/main/res/layout/activity_install_label.xml
@@ -45,7 +45,6 @@
android:background="#BFBFBF" />
+ android:layout_height="@dimen/titleViewHeight">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/include_install_label_identifier.xml b/app/src/main/res/layout/include_install_label_identifier.xml
index d166fd0..554b290 100644
--- a/app/src/main/res/layout/include_install_label_identifier.xml
+++ b/app/src/main/res/layout/include_install_label_identifier.xml
@@ -40,7 +40,8 @@
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
+ android:gravity="center_vertical"
+ android:textColor="@color/hintColor" />
\ No newline at end of file