diff --git a/app/src/main/java/com/sw/inbound/activity/FoodCollectionActivity.kt b/app/src/main/java/com/sw/inbound/activity/FoodCollectionActivity.kt index 2751ca0..c013ea1 100644 --- a/app/src/main/java/com/sw/inbound/activity/FoodCollectionActivity.kt +++ b/app/src/main/java/com/sw/inbound/activity/FoodCollectionActivity.kt @@ -135,6 +135,14 @@ class FoodCollectionActivity : ComponentActivity() { return@setOnClickListener } vectorThread() + val goods = searchGoodsList[clickIndex] + val files = collectList.filter { it.imageFile!=null }.map { it.imageFile!! } + if (files.isEmpty()) { + return@setOnClickListener + } + viewModel.uploadMultipleImages(goods.id!!, goods.goodsName!!, files) { + + } } binding.btnTakePhoto.clickWithDebounce { takePhoto() @@ -248,6 +256,7 @@ class FoodCollectionActivity : ComponentActivity() { collectList[index].let { it.bitmap = cropBitmap + it.imageFile = file it.isShowCamera = false } collectionAdapter.notifyItemChanged(index) diff --git a/app/src/main/java/com/sw/inbound/dialog/BaseDialog.kt b/app/src/main/java/com/sw/inbound/dialog/BaseDialog.kt index ac24391..753a633 100644 --- a/app/src/main/java/com/sw/inbound/dialog/BaseDialog.kt +++ b/app/src/main/java/com/sw/inbound/dialog/BaseDialog.kt @@ -16,7 +16,7 @@ import com.sw.inbound.utils.ext.hideKeyboard abstract class BaseDialog( context: Context, var defWidth: Int = 1500.dp, - var defHeight: Int = 900.dp + var defHeight: Int = 800.dp ) : Dialog(context, R.style.DialogTheme) { override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/sw/inbound/network/api/ApiService.kt b/app/src/main/java/com/sw/inbound/network/api/ApiService.kt index f3c5164..483afac 100644 --- a/app/src/main/java/com/sw/inbound/network/api/ApiService.kt +++ b/app/src/main/java/com/sw/inbound/network/api/ApiService.kt @@ -17,12 +17,14 @@ import com.sw.inbound.model.response.StorageType import com.sw.inbound.model.response.SupplierInfo import com.sw.inbound.model.response.User import okhttp3.MultipartBody +import okhttp3.RequestBody import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.Header import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.PartMap import retrofit2.http.Query import retrofit2.http.Url @@ -154,6 +156,14 @@ interface ApiService { @Part file: MultipartBody.Part, ): ApiResponse + @Multipart + @POST + suspend fun uploadMultipleImages( + @Url url: String = "${GlobalData.appBaseUrl}/neglect/inboundWeighingScale/add", + @PartMap params: Map, + @Part parts: List + ): ApiResponse + /** * 搜索物品列表 */ diff --git a/app/src/main/java/com/sw/inbound/objbox/DataBean.kt b/app/src/main/java/com/sw/inbound/objbox/DataBean.kt index ff03ab1..6d8e633 100644 --- a/app/src/main/java/com/sw/inbound/objbox/DataBean.kt +++ b/app/src/main/java/com/sw/inbound/objbox/DataBean.kt @@ -2,6 +2,7 @@ package com.sw.inbound.objbox import android.graphics.Bitmap import android.net.Uri +import java.io.File data class FoodClassInfo( var class_names: List, @@ -12,6 +13,7 @@ data class FoodClassInfo( data class FoodCollectionBean( var imageUri: Uri? = null, var bitmap: Bitmap? = null, + var imageFile: File? = null, var imageVector: FloatArray? = null, var isShowCamera: Boolean = false, var isFinish:Boolean = false diff --git a/app/src/main/java/com/sw/inbound/repository/RemoteRepository.kt b/app/src/main/java/com/sw/inbound/repository/RemoteRepository.kt index 325434b..d05f58a 100644 --- a/app/src/main/java/com/sw/inbound/repository/RemoteRepository.kt +++ b/app/src/main/java/com/sw/inbound/repository/RemoteRepository.kt @@ -19,6 +19,12 @@ import com.sw.inbound.model.response.User import com.sw.inbound.network.api.ApiService import com.sw.inbound.utils.ContextUtils import com.sw.inbound.utils.FileUtils +import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.asRequestBody +import okhttp3.RequestBody.Companion.toRequestBody import timber.log.Timber import java.io.File import javax.inject.Inject @@ -206,4 +212,27 @@ class RemoteRepository @Inject constructor( apiService.selfPurchaseWarehousing(list = list) } } + + suspend fun uploadMultipleImages(fileList: List, param: Map): ApiResponse { + val paramsMap = mutableMapOf() + param.forEach { (key, value) -> + paramsMap[key] = value.toRequestBody("text/plain".toMediaTypeOrNull()) + } + + // 准备文件参数 + val fileParts = mutableListOf() + fileList.forEachIndexed { index, file -> + val requestFile = file + .asRequestBody("multipart/form-data".toMediaTypeOrNull()) + val filePart = MultipartBody.Part.createFormData( + "goodsPics", + file.name, + requestFile + ) + fileParts.add(filePart) + } + return safeApiCall { + apiService.uploadMultipleImages(params = paramsMap, parts = fileParts) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/sw/inbound/viewmodel/ReceiptViewModel.kt b/app/src/main/java/com/sw/inbound/viewmodel/ReceiptViewModel.kt index 7eff3a2..36af5f9 100644 --- a/app/src/main/java/com/sw/inbound/viewmodel/ReceiptViewModel.kt +++ b/app/src/main/java/com/sw/inbound/viewmodel/ReceiptViewModel.kt @@ -377,6 +377,18 @@ class ReceiptViewModel @Inject constructor( callback(true) } } - + fun uploadMultipleImages(goodsId:String, goodsName:String, files:List, callback: (String?) -> Unit) { + launchWithLoading { + val map = mutableMapOf() + map["goodsId"] = goodsId + map["goodsName"] = goodsName + val resp = repository.uploadMultipleImages(fileList = files, param = map) + if (!parseResponse(resp)) { + callback(null) + return@launchWithLoading + } + callback(resp.data) + } + } } \ No newline at end of file