diff --git a/app/src/main/java/com/nova/brain/glass/MyApplication.java b/app/src/main/java/com/nova/brain/glass/MyApplication.java index cbe8646..8ee36e3 100644 --- a/app/src/main/java/com/nova/brain/glass/MyApplication.java +++ b/app/src/main/java/com/nova/brain/glass/MyApplication.java @@ -22,6 +22,7 @@ public class MyApplication extends App { public static AppComponent appComponent1; // 喷涂 public static AppComponent appComponent2; + public static AppComponent appComponent3; @Override public void onCreate() { @@ -29,9 +30,11 @@ public class MyApplication extends App { appComponent = HttpManager.getAppComponent(baseUrl, new HeaderInterceptor(getApplicationContext())); appComponent1 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext())); appComponent2 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext())); + appComponent3 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext())); // appComponent1 = HttpManager.getAppComponent("http://192.168.6.20:12119", new HeaderInterceptor(getApplicationContext())); // appComponent2 = HttpManager.getAppComponent("http://192.168.6.156:10085", new HeaderInterceptor(getApplicationContext())); +// appComponent3 = HttpManager.getAppComponent("http://192.168.22.125:8820/", new HeaderInterceptor(getApplicationContext())); initSdk(); diff --git a/app/src/main/java/com/nova/brain/glass/model/data/SprayingSubmitData.kt b/app/src/main/java/com/nova/brain/glass/model/data/SprayingSubmitData.kt index 46c10e2..2c750a7 100644 --- a/app/src/main/java/com/nova/brain/glass/model/data/SprayingSubmitData.kt +++ b/app/src/main/java/com/nova/brain/glass/model/data/SprayingSubmitData.kt @@ -10,3 +10,25 @@ data class SubmitTaskResponse( val data: Any? = null ) +data class BatchUploadResponse( + val code: Int, + val message: String, + val data: String? = null +) + +data class RecognizeByPathRequest( + val filePath: String +) + +data class OcrResultData( + val judgment: String = "", + val one: String = "", + val two: String = "" +) + +data class RecognizeByPathResponse( + val code: Int, + val message: String, + val data: OcrResultData? = null +) + diff --git a/app/src/main/java/com/nova/brain/glass/repository/Service.kt b/app/src/main/java/com/nova/brain/glass/repository/Service.kt index f8e3879..74828d0 100644 --- a/app/src/main/java/com/nova/brain/glass/repository/Service.kt +++ b/app/src/main/java/com/nova/brain/glass/repository/Service.kt @@ -8,6 +8,10 @@ import com.nova.brain.glass.model.data.BackToRequest import com.nova.brain.glass.model.data.GetTaskInfoRequest import com.nova.brain.glass.model.data.GetTaskInfoResponse import com.nova.brain.glass.model.data.RecognizeData +import com.nova.brain.glass.model.data.BatchUploadResponse +import com.nova.brain.glass.model.data.OcrResultData +import com.nova.brain.glass.model.data.RecognizeByPathRequest +import com.nova.brain.glass.model.data.RecognizeByPathResponse import com.nova.brain.glass.model.data.SubmitTaskRequest import com.nova.brain.glass.model.data.SubmitTaskResponse import com.nova.brain.glass.model.data.PushToNextData @@ -70,7 +74,10 @@ interface Service { @Multipart @POST("/skyscopicsecond-api/api/aiGlasses/batchUpload") - fun batchUpload(@Part multipartFile: MultipartBody.Part): Observable + fun batchUpload(@Part multipartFile: MultipartBody.Part): Observable + + @POST("/skyscopicsecond-api/api/aiGlasses/recognizeByPath") + fun recognizeByPath(@Body body: RecognizeByPathRequest): Observable @POST("/skyscopicsecond-api/api/aiGlasses/submitTask") fun submitTask(@Body body: SubmitTaskRequest): Observable diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt index 3c1dde8..102d5fa 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt @@ -115,12 +115,14 @@ class SprayingOCRActivity : message.showMessage() } } - viewModel.uploadSuccessPath.observe(this) { path -> - if (path.isNullOrBlank()) return@observe - viewModel.clearUploadSuccessPath() + viewModel.ocrResult.observe(this) { result -> + if (result == null) return@observe + viewModel.clearOcrResult() startActivity(Intent(this@SprayingOCRActivity, SprayingResultActivity::class.java).apply { - putExtra("path", path) putExtra("taskId", taskId) + putExtra("judgment", result.judgment) + putExtra("one", result.one) + putExtra("two", result.two) }) finish() } diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt index 4bf4613..046e9e8 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt @@ -10,11 +10,9 @@ import android.os.Looper import android.view.LayoutInflater import android.view.WindowManager import androidx.activity.result.contract.ActivityResultContracts -import androidx.core.view.doOnLayout import androidx.recyclerview.widget.RecyclerView import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivitySprayingResultBinding -import com.nova.brain.glass.helper.BitmapDecodeHelper import com.nova.brain.glass.helper.GlassMediaServiceHelper import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper @@ -31,7 +29,6 @@ import com.xuqm.base.common.LogHelper import com.xuqm.base.extensions.showMessage import com.xuqm.base.ui.BaseListFormLayoutNormalActivity import java.io.File -import java.util.concurrent.Executors import java.util.UUID class SprayingResultActivity : @@ -45,7 +42,8 @@ class SprayingResultActivity : .orEmpty() .ifBlank { "1493291302287048704" } } - private val imageDecodeExecutor = Executors.newSingleThreadExecutor() + private var ocrOne: String = "" + private var ocrTwo: String = "" private var status = true private var successDialog: AlertDialog? = null private val uiHandler = Handler(Looper.getMainLooper()) @@ -191,15 +189,19 @@ class SprayingResultActivity : message.showMessage() } } - intent.getStringExtra("path")?.apply { - showResultImage(this) - setStatusImage() - } + val judgment = intent.getStringExtra("judgment").orEmpty() + ocrOne = intent.getStringExtra("one").orEmpty() + ocrTwo = intent.getStringExtra("two").orEmpty() + status = judgment != "不合格" + setStatusImage() } fun setStatusImage() { binding.tvTaskHeader.text = if (status) "OCR识别结果:合格" else "OCR识别结果:不合格" binding.status.setImageResource(if (status) R.mipmap.ocr_true else R.mipmap.ocr_false) + binding.value1.text = "识码一:$ocrOne" + binding.value2.text = "识码二:$ocrTwo" + binding.value3.text = if (status) "两码一致,符合要求!" else "两码不一致,不符合要求!" if (status) { binding.value1.paintFlags = binding.value1.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv() @@ -272,21 +274,7 @@ class SprayingResultActivity : override fun adapter(): BasePagedAdapter = adapter - private fun showResultImage(path: String) { - binding.iv.doOnLayout { - val targetWidth = it.width.coerceAtLeast(1) - val targetHeight = it.height.coerceAtLeast(1) - imageDecodeExecutor.execute { - val bitmap = BitmapDecodeHelper.decodeSampledBitmap(path, targetWidth, targetHeight) - runOnUiThread { - if (isFinishing || isDestroyed) { - return@runOnUiThread - } - binding.iv.setImageBitmap(bitmap) - } - } - } - } + private fun showSuccessDialogThenBackToTaskList() { successDialog?.dismiss() diff --git a/app/src/main/java/com/nova/brain/glass/viewmodel/SprayingOCRVM.kt b/app/src/main/java/com/nova/brain/glass/viewmodel/SprayingOCRVM.kt index 1d44bbf..a742f01 100644 --- a/app/src/main/java/com/nova/brain/glass/viewmodel/SprayingOCRVM.kt +++ b/app/src/main/java/com/nova/brain/glass/viewmodel/SprayingOCRVM.kt @@ -3,6 +3,8 @@ package com.nova.brain.glass.viewmodel import androidx.lifecycle.MutableLiveData import com.nova.brain.glass.MyApplication import com.nova.brain.glass.model.ItemItem +import com.nova.brain.glass.model.data.OcrResultData +import com.nova.brain.glass.model.data.RecognizeByPathRequest import com.nova.brain.glass.repository.Service import com.xuqm.base.di.manager.HttpManager import com.xuqm.base.viewmodel.BaseListViewModel @@ -22,10 +24,10 @@ enum class UploadState { FAILED } -class SprayingOCRVM: BaseListViewModel() { +class SprayingOCRVM : BaseListViewModel() { val uploadState = MutableLiveData(UploadState.IDLE) val uploadError = MutableLiveData() - val uploadSuccessPath = MutableLiveData() + val ocrResult = MutableLiveData() private var uploadingPath: String? = null private var uploadDisposable: Disposable? = null @@ -55,10 +57,15 @@ class SprayingOCRVM: BaseListViewModel() { .batchUpload(multipartFile) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe({ + .subscribe({ response -> if (uploadingPath != path) return@subscribe - uploadState.value = UploadState.SUCCESS - uploadSuccessPath.value = path + if (response.code == 200 && !response.data.isNullOrBlank()) { + uploadState.value = UploadState.IDLE + startRecognize(path, response.data) + } else { + uploadState.value = UploadState.FAILED + uploadError.value = if (response.message.isBlank()) "附件上传失败" else response.message + } }, { e -> if (uploadingPath != path) return@subscribe uploadState.value = UploadState.FAILED @@ -68,6 +75,28 @@ class SprayingOCRVM: BaseListViewModel() { add(disposable) } + private fun startRecognize(localPath: String, serverPath: String) { + val disposable = HttpManager.getApi(MyApplication.appComponent2, Service::class.java) + .recognizeByPath(RecognizeByPathRequest(filePath = serverPath)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ response -> + if (uploadingPath != localPath) return@subscribe + if (response.code == 200) { + uploadState.value = UploadState.SUCCESS + ocrResult.value = response.data ?: OcrResultData() + } else { + uploadState.value = UploadState.FAILED + uploadError.value = if (response.message.isBlank()) "OCR识别失败" else response.message + } + }, { e -> + if (uploadingPath != localPath) return@subscribe + uploadState.value = UploadState.FAILED + uploadError.value = e.message ?: "OCR识别失败" + }) + add(disposable) + } + fun cancelUpload() { uploadingPath = null uploadDisposable?.dispose() @@ -77,7 +106,7 @@ class SprayingOCRVM: BaseListViewModel() { } } - fun clearUploadSuccessPath() { - uploadSuccessPath.value = null + fun clearOcrResult() { + ocrResult.value = null } -} +} \ No newline at end of file