提交入库参数、采集数据优化

This commit is contained in:
2026-01-30 15:07:56 +08:00
parent a7bac4321e
commit efcf3d436b
9 changed files with 80 additions and 65 deletions
@@ -249,6 +249,7 @@ class FoodCollectionActivity : ComponentActivity() {
toast("每次只允许保存${MAX_COUNT}条数据")
return
}
showWaitingDialog2("加载中")
cameraUtils.takePhoto(cameraCallback)
}
@@ -287,6 +288,7 @@ class FoodCollectionActivity : ComponentActivity() {
val index = collectList.indexOfFirst { it.imageFile == null }
if (index == -1) {
toast("每次只允许保存${MAX_COUNT}条数据")
showWaitingDialog2("加载中")
rerurn@ cameraCallback
}
// toast("index=$index")
@@ -302,6 +304,7 @@ class FoodCollectionActivity : ComponentActivity() {
FoodModule.bitmap2FloatArray(cropBitmap, false)
} catch (e: Exception) {
e.printStackTrace()
hideWaitingDialog()
toast("操作失败")
return@let
}
@@ -309,6 +312,7 @@ class FoodCollectionActivity : ComponentActivity() {
val filterList =
foodList.filter { it.score < FoodModule.BAG_RATE && it.name.contains("黑袋子") }
if (filterList.isNotEmpty()) {
hideWaitingDialog()
toast("当前物品可能被袋子遮挡,请检查后重试")
return@let
}
@@ -333,9 +337,11 @@ class FoodCollectionActivity : ComponentActivity() {
if (bitmap.isRecycled.not()) {
bitmap.recycle()
}
hideWaitingDialog()
}
} catch (e: Exception) {
e.printStackTrace()
hideWaitingDialog()
toast("程序异常${e.message}")
}
}
@@ -549,25 +555,29 @@ class FoodCollectionActivity : ComponentActivity() {
/**
* 显示等待提示框
*/
fun showWaitingDialog(tip: String?): Dialog? {
fun showWaitingDialog(tip: String?) {
runOnUiThread {
hideWaitingDialog()
val view = View.inflate(this, R.layout.dialog_waiting, null)
if (!TextUtils.isEmpty(tip)) (view.findViewById<View?>(R.id.tvTip) as TextView).text = tip
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog)
mDialogWaiting!!.show()
mDialogWaiting!!.setCancelable(true)
return mDialogWaiting
}
}
/**
* 隐藏等待提示框
*/
fun hideWaitingDialog() {
runOnUiThread {
mDialogWaiting?.dismiss()
mDialogWaiting = null
}
}
fun showWaitingDialog2(tip: String?) {
runOnUiThread {
if (mDialogWaiting == null) {
hideWaitingDialog()
val view = View.inflate(this, R.layout.dialog_waiting, null)
@@ -579,6 +589,7 @@ class FoodCollectionActivity : ComponentActivity() {
val tvTip = contentView?.findViewById<TextView>(R.id.tvTip)
tvTip?.text = tip
}
}
/**
* 清除Coil缓存
@@ -45,6 +45,7 @@ import com.sw.inbound.utils.ext.roundedDecimalPlace
import com.sw.inbound.utils.ext.toJsonString
import com.sw.inbound.utils.ext.toast
import com.sw.inbound.viewmodel.ReceiptViewModel
import com.sw.inbound.viewmodel.UserViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@@ -77,7 +78,8 @@ abstract class GoodsListActivity : ComponentActivity() {
var id: String = ""
var supplierId: String = ""
lateinit var binding: ActivityGoodsListBinding
val viewModel: ReceiptViewModel by viewModels()
val receiptViewModel: ReceiptViewModel by viewModels()
val userViewModel: UserViewModel by viewModels()
val goodsList: MutableList<GoodsInfo> = mutableListOf()
abstract fun initRecyclerView()
@@ -167,6 +169,8 @@ abstract class GoodsListActivity : ComponentActivity() {
//val array = arrayOf("1","2","qwe")
//Timber.tag(TAG).d("测试:${array[2].toInt()}")
userViewModel.getInitInfo()
}
private var weightCallback: ((weight: Int) -> Unit)? = null
@@ -346,7 +350,7 @@ abstract class GoodsListActivity : ComponentActivity() {
}
return@let
}
viewModel.recognizeGoodsList(
receiptViewModel.recognizeGoodsList(
//nameList = foodList,
scoreList = foodList,
) { goodsList ->
@@ -488,7 +492,7 @@ abstract class GoodsListActivity : ComponentActivity() {
pageNo: Int,
pageSize: Int = PAGE_SIZE
): List<SearchGoodsInfo.Record> {
return viewModel.searchGoodsInfoList2(
return receiptViewModel.searchGoodsInfoList2(
goodsName = searchName,
pageNo = pageNo,
pageSize = pageSize
@@ -562,7 +566,7 @@ abstract class GoodsListActivity : ComponentActivity() {
)
Timber.tag("SelfProcurementActivity")
.d("receiptSubmit确认收货提交数据:${uploadInfo.toJsonString()}")
viewModel.confirmReceipt(uploadInfo) { success ->
receiptViewModel.confirmReceipt(uploadInfo) { success ->
if (success) {
toast("确认收货成功")
finish()
@@ -597,7 +601,7 @@ abstract class GoodsListActivity : ComponentActivity() {
}
Timber.tag("SelfProcurementActivity")
.d("selfProcurementSubmit自采入库提交数据:${submitData.toJsonString()}")
viewModel.addToWarehouse(submitData) { success ->
receiptViewModel.addToWarehouse(submitData) { success ->
if (success) {
toast("提交入库成功")
finish()
@@ -618,13 +622,13 @@ abstract class GoodsListActivity : ComponentActivity() {
// }
fun createNewGoods(file: File, param: GoodsAddParam, callback: (Boolean) -> Unit) {
viewModel.uploadImage(file) { imgUrl ->
receiptViewModel.uploadImage(file) { imgUrl ->
if (imgUrl.isNullOrBlank()) {
toast("图片上传失败")
return@uploadImage
}
param.relativeUrl = imgUrl
viewModel.createNewGoods(param = param, callback = callback)
receiptViewModel.createNewGoods(param = param, callback = callback)
}
}
@@ -651,7 +655,7 @@ abstract class GoodsListActivity : ComponentActivity() {
val map = hashMapOf<String, RequestBody>()
map["goodsId"] = goodsId.toRequestBody()
map["goodsName"] = goodsName.toRequestBody()
viewModel.uploadMultipleImages(files = list, params = map)
receiptViewModel.uploadMultipleImages(files = list, params = map)
}
}
@@ -1,16 +1,12 @@
package com.sw.inbound.activity
import android.annotation.SuppressLint
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager
import com.sw.inbound.adapter.ReceiptGoodsAdapter
import com.sw.inbound.model.response.DictType
import com.sw.inbound.utils.ext.gone
import com.sw.inbound.utils.ext.toast
import com.sw.inbound.utils.ext.visible
import kotlinx.coroutines.launch
class ReceiptActivity : GoodsListActivity() {
@@ -42,7 +38,7 @@ class ReceiptActivity : GoodsListActivity() {
}
}
if (isNewReceipt.not()) {
viewModel.getReceiveDetail(id) { detail ->
receiptViewModel.getReceiveDetail(id) { detail ->
runOnUiThread {
if (detail == null) {
toast("未查询到数据")
@@ -1,22 +1,19 @@
package com.sw.inbound.adapter
import android.content.Context
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.core.net.toUri
import coil.load
import coil.transform.CircleCropTransformation
import coil.transform.RoundedCornersTransformation
import com.chad.library.adapter4.BaseQuickAdapter
import com.chad.library.adapter4.viewholder.QuickViewHolder
import com.sw.inbound.R
import com.sw.inbound.databinding.ListItemFoodCollectionBinding
import com.sw.inbound.objbox.FoodCollectionBean
import kotlin.let
import kotlin.run
import com.sw.inbound.utils.ext.gone
import com.sw.inbound.utils.ext.invisible
import com.sw.inbound.utils.ext.visible
class FoodCollectionAdapter(var list: MutableList<FoodCollectionBean>) :
BaseQuickAdapter<FoodCollectionBean, FoodCollectionAdapter.VH>(list) {
@@ -32,21 +29,21 @@ class FoodCollectionAdapter (var list: MutableList<FoodCollectionBean>) :
override fun onBindViewHolder(holder: VH, position: Int, item: FoodCollectionBean?) {
val binding = holder.binding
item?.let {
binding.ivFinish.visibility = if (it.isFinish) View.VISIBLE else View.GONE
binding.ivDelete.visibility = if (it.isShowCamera) View.GONE else View.VISIBLE
binding.imageView.run {
binding.ivFinish.run {
if (it.isFinish) visible() else gone()
}
binding.ivDelete.run {
if (it.isShowCamera) gone() else visible()
}
if (it.isShowCamera) {
load(null)
postDelayed({
scaleType = ImageView.ScaleType.CENTER
setImageResource(R.mipmap.ic_camera256)
},100)
binding.imageView.invisible()
binding.ivCameraFlag.visible()
//binding.imageView.load(null)
} else {
binding.ivCameraFlag.invisible()
binding.imageView.run {
visible()
scaleType = ImageView.ScaleType.FIT_CENTER
//setImageURI(it.imageUri)
// load(it.bitmap)
// setImageBitmap(it.bitmap!!)
//setImageURI(it.imageFile?.toUri())
load(it.imageFile?.toUri()) {
crossfade(true)
transformations(RoundedCornersTransformation(5f, 5f, 5f, 5f))
@@ -289,8 +289,8 @@ class GoodsStoreDialog(
context.toast("请采集图片")
return
}
val unit = binding.tvProcurementUnit.text.trim().toString()
if (unit.isBlank()) {
val unitName = binding.tvProcurementUnit.text.trim().toString()
if (unitName.isBlank()) {
context.toast("请选择入库单位")
return
}
@@ -339,9 +339,9 @@ class GoodsStoreDialog(
goodId = goods.id,
goodName = goods.goodsName,
consumeValue = goods.purchaseValue,
//goodsPurId = binding.tvProcurementUnit.tag.toString(),
kcUnitId = binding.tvProcurementUnit.tag.toString(),
unitName = unit,
goodsPurId = binding.tvProcurementUnit.tag.toString(),
kcUnitId = goods.unit,
unitName = unitName,
//收货接口-数量
receivedNum = count,
//收货接口-单价(含税)
@@ -66,6 +66,7 @@ data class SearchGoodsInfo(
*/
val consumeValue: String? = "",
val purchaseValue: String? = "",
val unit: String? = "",
@SerializedName("specification")
val specification: String? = "",
@@ -48,7 +48,7 @@ fun HomeScreen(
// 避免每次进入都获取字典类型
LaunchedEffect(Unit) {
Timber.d("LaunchedEffect(Unit)")
viewModel.getInitInfo()
// viewModel.getInitInfo()
}
BackHandler {
@@ -21,18 +21,18 @@ class UserViewModel @Inject constructor(
private val repo: RemoteRepository
) : BaseViewModel(repo) {
private var isFirstLaunch by mutableStateOf(true)
// private var isFirstLaunch by mutableStateOf(true)
private val _user = MutableStateFlow<User?>(null)
val user = _user.asStateFlow()
fun getInitInfo() {
Timber.d("getInitInfo isFirstLaunch = $isFirstLaunch")
// Timber.d("getInitInfo isFirstLaunch = $isFirstLaunch")
//if (isFirstLaunch) {
getUserInfo()
// getUserInfo()
getDictType()
isFirstLaunch = false
// isFirstLaunch = false
//}
}
@@ -10,8 +10,14 @@
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="center"/>
<ImageView
android:id="@+id/ivCameraFlag"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="center"
tools:src="@mipmap/ic_camera256"/>
android:src="@mipmap/ic_camera256"/>
<ImageView
android:id="@+id/ivDelete"