联合支付功能调试
This commit is contained in:
Generated
+2
-2
@@ -4,10 +4,10 @@
|
||||
<selectionStates>
|
||||
<SelectionState runConfigName="app">
|
||||
<option name="selectionMode" value="DROPDOWN" />
|
||||
<DropdownSelection timestamp="2026-03-10T03:02:12.156794100Z">
|
||||
<DropdownSelection timestamp="2026-03-20T06:04:19.673022300Z">
|
||||
<Target type="DEFAULT_BOOT">
|
||||
<handle>
|
||||
<DeviceId pluginId="Default" identifier="serial=192.168.1.211:5555;connection=7435869e" />
|
||||
<DeviceId pluginId="Default" identifier="serial=192.168.1.16:5555;connection=571832d0" />
|
||||
</handle>
|
||||
</Target>
|
||||
</DropdownSelection>
|
||||
|
||||
@@ -51,8 +51,10 @@ android {
|
||||
kotlinOptions {
|
||||
jvmTarget = "11"
|
||||
}
|
||||
viewBinding {
|
||||
enable = true
|
||||
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
buildConfig = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -140,6 +140,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
|
||||
private var isStartRecognize = false
|
||||
|
||||
//0-联合支付,1-独立支付
|
||||
val settlementMode by lazy {
|
||||
SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
|
||||
}
|
||||
|
||||
override fun getViewModel(): BaseViewModel {
|
||||
return viewModel
|
||||
}
|
||||
@@ -245,6 +250,18 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
SensorScaleUtils.addWeightListener { weight ->
|
||||
log("registerDataChange weight = $weight")
|
||||
//runOnUiThread { binding.tvShowWeight.text="${weight*1000}克" }
|
||||
if (presentation?.jointPaymentQueryFinish == true) {
|
||||
//0-即放即取,1-余量计量
|
||||
val mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
|
||||
if (mealPickupMode == 0 && weight <= 0.005) {
|
||||
isAnalyzing = false
|
||||
presentation?.step1FoodRecognizing()
|
||||
} else {
|
||||
return@addWeightListener
|
||||
}
|
||||
}
|
||||
|
||||
//if (presentation?.currentFood == null) return@addWeightListener
|
||||
if (lastWeight - weight > 0.005) {
|
||||
//及放及取,从秤上拿走超过5克
|
||||
if (presentation?.mealPickupMode == 0) {
|
||||
@@ -295,8 +312,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
} else {
|
||||
block()
|
||||
}
|
||||
//0-联合支付,1-独立支付
|
||||
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
|
||||
if (presentation?.mealPickupMode == 1 || settlementMode == 0) {
|
||||
lastWeight = weight
|
||||
}
|
||||
@@ -602,8 +617,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
binding.btnPay.run {
|
||||
//0-计费,1-不计费
|
||||
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
|
||||
//0-联合支付,1-独立支付
|
||||
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
|
||||
if (settlementMode == 1 && chargeMode == 0) visible() else gone()
|
||||
}
|
||||
}
|
||||
@@ -651,11 +664,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
userId: String?,
|
||||
isMember:Boolean,
|
||||
notEnoughOneBlock: () -> Unit = {},
|
||||
block: () -> Unit
|
||||
successBlock: () -> Unit
|
||||
) {
|
||||
log("foodWeight=$foodWeight,eatWeight=$eatWeight")
|
||||
//0-联合支付,1-独立支付
|
||||
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
|
||||
//0-计费,1-不计费
|
||||
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
|
||||
//0-即放即取,1-余量计量
|
||||
@@ -693,10 +704,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
paymentFrom = if (settlementMode == 0) 1 else 2,
|
||||
member = isMember
|
||||
)
|
||||
submitOrder(order, block)
|
||||
submitOrder(order, successBlock)
|
||||
}
|
||||
|
||||
private fun submitOrder(order: FoodOrder, block: () -> Unit) {
|
||||
private fun submitOrder(order: FoodOrder, successBlock: () -> Unit) {
|
||||
viewModel.createOrder(order) { orderId ->
|
||||
runOnUiThread {
|
||||
binding.root.postDelayed({
|
||||
@@ -706,7 +717,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
return@postDelayed
|
||||
}
|
||||
foodOrderId = orderId
|
||||
block()
|
||||
successBlock()
|
||||
|
||||
if (checkedItem!!.isFromSearch == true) {
|
||||
//当前菜名为手动搜索选择,非识别结果,保存向量数据
|
||||
@@ -1055,8 +1066,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
log("registerDataChange photoUri 识别数据名称:$foodName")
|
||||
runOnUiThread {
|
||||
binding.flPay.run {
|
||||
//0-联合支付,1-独立支付
|
||||
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
|
||||
//0-计费,1-不计费
|
||||
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
|
||||
//独立支付+计费模式才显示“去结算”按钮,否则使用人脸识别
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.sw.dualscreen.adapter
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.core.graphics.toColorInt
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.chad.library.adapter4.BaseQuickAdapter
|
||||
import com.chad.library.adapter4.viewholder.QuickViewHolder
|
||||
import com.sw.dualscreen.databinding.LayoutFoodListHeaderBinding
|
||||
import com.sw.dualscreen.ext.dp
|
||||
import com.sw.dualscreen.ext.format2String
|
||||
import com.sw.dualscreen.model.response.FoodItem
|
||||
|
||||
class FoodOrderAdapter(var list: MutableList<FoodItem>) :
|
||||
BaseQuickAdapter<FoodItem, FoodOrderAdapter.VH>(list) {
|
||||
|
||||
inner class VH(var binding: LayoutFoodListHeaderBinding) : QuickViewHolder(binding.root)
|
||||
|
||||
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): VH {
|
||||
val inflater = LayoutInflater.from(context)
|
||||
val binding = LayoutFoodListHeaderBinding.inflate(inflater, parent, false)
|
||||
return VH(binding)
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun onBindViewHolder(holder: VH, position: Int, item: FoodItem?) {
|
||||
val binding = holder.binding
|
||||
item?.let {
|
||||
binding.tvFoodName.text = it.foodName
|
||||
binding.tvPriceNorm.text = it.foodPrice.format2String(2)
|
||||
binding.tvWeight.text = "${it.num}克"
|
||||
binding.tvAmount.text = it.price.format2String(2)
|
||||
}
|
||||
setTextColor(binding.tvFoodName, binding.tvPriceNorm, binding.tvWeight, binding.tvAmount)
|
||||
binding.root.updateLayoutParams<RecyclerView.LayoutParams> {
|
||||
topMargin = 2.dp
|
||||
bottomMargin = 2.dp
|
||||
}
|
||||
}
|
||||
|
||||
fun setTextColor(vararg tvList: TextView) {
|
||||
tvList.forEach {
|
||||
it.setTextColor("#FF33446A".toColorInt())
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,8 +7,10 @@ import android.graphics.BitmapFactory
|
||||
import android.graphics.ImageFormat
|
||||
import android.graphics.Rect
|
||||
import android.graphics.YuvImage
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.TypedValue
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.EditText
|
||||
@@ -159,3 +161,14 @@ fun View.invisible() {
|
||||
fun View.gone() {
|
||||
visibility = View.GONE
|
||||
}
|
||||
|
||||
val Context.screenSize: IntArray
|
||||
get() {
|
||||
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||
val displayMetrics = DisplayMetrics()
|
||||
windowManager.defaultDisplay.getMetrics(displayMetrics)
|
||||
return intArrayOf(
|
||||
displayMetrics.widthPixels,
|
||||
displayMetrics.heightPixels
|
||||
)
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ data class RespCodeMsg(
|
||||
|
||||
|
||||
data class PostEvent(var name: String = "")
|
||||
data class UpdateRefreshEvent(var name:String = "")
|
||||
data class UpdateRefreshEvent(var name: String = "")
|
||||
data class PaySuccessEvent(
|
||||
var name: String = ""
|
||||
)
|
||||
@@ -162,4 +162,29 @@ data class WeightRecord(
|
||||
var foodInfo: FoodInfo? = null,
|
||||
var lastWeight: Int = 0,
|
||||
var currentWeight: Int = 0
|
||||
)
|
||||
|
||||
data class FoodItem(
|
||||
val id: String? = null,
|
||||
val foodId: String? = null,
|
||||
val foodName: String? = null,
|
||||
val foodMaterialId: String? = null,
|
||||
val specId: String? = null,
|
||||
val num: Int = 0,
|
||||
val eatNum: Int = 0,
|
||||
val price: Double = 0.0,
|
||||
val foodPrice: Double = 0.0,
|
||||
val discount: Double = 0.0,
|
||||
val income: Double = 0.0,
|
||||
val foodDifferenceId: Long = 0,
|
||||
val createTime: String? = null
|
||||
)
|
||||
|
||||
data class FoodOrderModel(
|
||||
val calorie: Double = 0.0,
|
||||
val incomeSum: Double = 0.0,
|
||||
val discountSum: Double = 0.0,
|
||||
val eatWeightSum: Int = 0,
|
||||
val orderNo: String? = null,
|
||||
val list: List<FoodItem>? = null
|
||||
)
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.sw.dualscreen.network
|
||||
|
||||
import com.sw.dualscreen.BuildConfig
|
||||
import com.sw.dualscreen.MyApp
|
||||
import com.sw.dualscreen.network.api.ApiService
|
||||
import com.sw.dualscreen.network.interceptor.RequestInterceptor
|
||||
@@ -22,7 +23,7 @@ object ApiClient {
|
||||
.addNetworkInterceptor(HttpLoggingInterceptor(logger = {
|
||||
Timber.d("okhttp logger ==>${it}")
|
||||
}).apply {
|
||||
level = if (MyApp.DEBUG) {
|
||||
level = if (BuildConfig.DEBUG) {
|
||||
HttpLoggingInterceptor.Level.BODY
|
||||
} else {
|
||||
HttpLoggingInterceptor.Level.NONE
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.sw.dualscreen.model.response.DinnerType
|
||||
import com.sw.dualscreen.model.response.FaceData
|
||||
import com.sw.dualscreen.model.response.FoodInfo
|
||||
import com.sw.dualscreen.model.response.FoodOrder
|
||||
import com.sw.dualscreen.model.response.FoodOrderModel
|
||||
import com.sw.dualscreen.model.response.FoodSearchReq
|
||||
import com.sw.dualscreen.model.response.FoodVector
|
||||
import com.sw.dualscreen.model.response.MemberInfo
|
||||
@@ -311,4 +312,13 @@ interface ApiService {
|
||||
@Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/boothMachine/app/deleteBoothMachineCollection",
|
||||
@QueryMap param: MutableMap<String, String?>
|
||||
): ApiResponse<Any?>
|
||||
|
||||
/**
|
||||
* 档口机向量数据分页查询
|
||||
*/
|
||||
@GET
|
||||
suspend fun getFoodOrderList(
|
||||
@Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/settlement/terminal/app/getFoodInfoBySettlement",
|
||||
@Query("userId") userId: String
|
||||
): ApiResponse<FoodOrderModel?>
|
||||
}
|
||||
@@ -19,6 +19,7 @@ package com.sw.dualscreen.objbox
|
||||
import android.content.Context
|
||||
import android.os.Environment
|
||||
import android.util.Log
|
||||
import com.sw.dualscreen.BuildConfig
|
||||
import com.sw.plate.App
|
||||
import io.objectbox.Box
|
||||
import io.objectbox.BoxStore
|
||||
@@ -91,14 +92,14 @@ object ObjectBox {
|
||||
}
|
||||
}
|
||||
|
||||
// if (BuildConfig.DEBUG) {
|
||||
val syncAvailable = if (Sync.isAvailable()) "available" else "unavailable"
|
||||
Timber.tag(TAG)
|
||||
.d("Using ObjectBox ${BoxStore.getVersion()} (${BoxStore.getVersionNative()}, sync $syncAvailable)")
|
||||
// Enable ObjectBox Admin on debug builds.
|
||||
// https://docs.objectbox.io/data-browser
|
||||
Admin(boxStore).start(context.applicationContext)
|
||||
// }
|
||||
if (BuildConfig.DEBUG) {
|
||||
val syncAvailable = if (Sync.isAvailable()) "available" else "unavailable"
|
||||
Timber.tag(TAG)
|
||||
.d("Using ObjectBox ${BoxStore.getVersion()} (${BoxStore.getVersionNative()}, sync $syncAvailable)")
|
||||
// Enable ObjectBox Admin on debug builds.
|
||||
// https://docs.objectbox.io/data-browser
|
||||
Admin(boxStore).start(context.applicationContext)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.sw.dualscreen.presentation
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Presentation
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.Bitmap
|
||||
@@ -21,14 +22,18 @@ import androidx.annotation.RequiresApi
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.postDelayed
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.arcsoft.face.ErrorInfo
|
||||
import com.sw.dualscreen.BuildConfig
|
||||
import com.sw.dualscreen.GlobalKey
|
||||
import com.sw.dualscreen.MyApp
|
||||
import com.sw.dualscreen.R
|
||||
import com.sw.dualscreen.activity.MainActivity
|
||||
import com.sw.dualscreen.adapter.FoodOrderAdapter
|
||||
import com.sw.dualscreen.databinding.PresentationMainScreenBinding
|
||||
import com.sw.dualscreen.ext.dp
|
||||
import com.sw.dualscreen.ext.format2String
|
||||
@@ -36,9 +41,11 @@ import com.sw.dualscreen.ext.gone
|
||||
import com.sw.dualscreen.ext.load
|
||||
import com.sw.dualscreen.ext.maskName
|
||||
import com.sw.dualscreen.ext.roundedDecimalPlace
|
||||
import com.sw.dualscreen.ext.screenSize
|
||||
import com.sw.dualscreen.ext.visible
|
||||
import com.sw.dualscreen.model.response.DinnerType
|
||||
import com.sw.dualscreen.model.response.FoodInfo
|
||||
import com.sw.dualscreen.model.response.FoodItem
|
||||
import com.sw.dualscreen.model.response.UserEnergy
|
||||
import com.sw.dualscreen.model.response.UserNutrition
|
||||
import com.sw.dualscreen.utils.Debouncer
|
||||
@@ -128,9 +135,7 @@ class MainScreenPresentation(
|
||||
initView()
|
||||
//0-计费,1-不计费
|
||||
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
|
||||
//0-联合支付,1-独立支付
|
||||
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
|
||||
if (settlementMode == 0 || chargeMode == 1) {
|
||||
if (activity.settlementMode == 0 || chargeMode == 1) {
|
||||
setupArcCamera()
|
||||
}
|
||||
registerDataChange()
|
||||
@@ -291,6 +296,9 @@ class MainScreenPresentation(
|
||||
LightManager.openGreenLight()
|
||||
currentStep = 3
|
||||
stepChangeCallback(currentStep)
|
||||
|
||||
binding.llTopInfo.visible()
|
||||
binding.flFoodDetail.gone()
|
||||
//根据接口数据更新热量数据--------------------------
|
||||
userViewModel.getUserNutritionData(userId = userId) { nutrition ->
|
||||
activity.runOnUiThread {
|
||||
@@ -312,6 +320,11 @@ class MainScreenPresentation(
|
||||
activity.hideWaitingDialog()
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: 判断是联合支付调用接口查询就餐信息------------------------
|
||||
if (activity.settlementMode == 0) {
|
||||
loadOrderList(userId)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
@@ -472,12 +485,15 @@ class MainScreenPresentation(
|
||||
private var isFirstOpen = true
|
||||
var startTime = 0L
|
||||
|
||||
var jointPaymentQueryFinish = false
|
||||
|
||||
/**
|
||||
* 餐品识别中
|
||||
*/
|
||||
fun step1FoodRecognizing() {
|
||||
Timber.tag(TAG).d("main,step1,耗时:${System.currentTimeMillis() - startTime}")
|
||||
startTime = System.currentTimeMillis()
|
||||
jointPaymentQueryFinish = false
|
||||
hideStandbyScreen()
|
||||
activity.resetTouchTime()
|
||||
if (isFirstOpen.not()) {
|
||||
@@ -501,6 +517,9 @@ class MainScreenPresentation(
|
||||
|
||||
stepChangeCallback(currentStep)
|
||||
|
||||
binding.llTopInfo.visible()
|
||||
binding.flFoodDetail.gone()
|
||||
|
||||
binding.calorieInclude.root.gone()
|
||||
binding.nutritionInclude.root.gone()
|
||||
|
||||
@@ -582,7 +601,7 @@ class MainScreenPresentation(
|
||||
}
|
||||
|
||||
// 当前食物信息
|
||||
private var currentFood: FoodInfo? = null
|
||||
var currentFood: FoodInfo? = null
|
||||
fun updateFood(foodInfo: FoodInfo?) {
|
||||
//if (isLoadUnbilledMode) return
|
||||
Timber.tag(TAG).d("main,updateFood,耗时:${System.currentTimeMillis() - startTime}")
|
||||
@@ -594,8 +613,6 @@ class MainScreenPresentation(
|
||||
binding.tvFoodName.text = foodInfo.foodName
|
||||
binding.ivPreviewImage.gone()
|
||||
binding.ivFrame.gone()
|
||||
//0-联合支付,1-独立支付
|
||||
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
|
||||
//0-计费,1-不计费
|
||||
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
|
||||
if (chargeMode == 0) {
|
||||
@@ -609,12 +626,12 @@ class MainScreenPresentation(
|
||||
binding.ivRecImage.gone()
|
||||
}
|
||||
//独立支付+计费模式,使用人脸识别
|
||||
if (settlementMode == 1 && chargeMode == 0) {
|
||||
if (activity.settlementMode == 1 && chargeMode == 0) {
|
||||
//计费,查询营养信息、价格信息------------------------
|
||||
loadBilledMode()
|
||||
} else {
|
||||
//联合支付,进行人脸识别
|
||||
if (settlementMode == 0) {
|
||||
if (activity.settlementMode == 0) {
|
||||
step2FaceRecognizing(foodInfo)
|
||||
} else {
|
||||
//不计费,开启人脸识别
|
||||
@@ -1169,28 +1186,37 @@ class MainScreenPresentation(
|
||||
return
|
||||
}
|
||||
createOrder(notEnoughOneBlock = {
|
||||
if (activity.settlementMode == 0) {
|
||||
binding.flFoodDetail.gone()
|
||||
binding.llTopInfo.visible()
|
||||
}
|
||||
// if (mealPickupMode == 0) {
|
||||
currentStep = 2
|
||||
step2FaceRecognizing(currentFood!!)
|
||||
// }
|
||||
}) {
|
||||
}, successBlock = {
|
||||
// TODO: 测试人脸识别问题--------------------
|
||||
//recognizeViewModel.updateRegisterStatus(REGISTER_STATUS_READY)
|
||||
if (MyApp.DEBUG) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
ToastUtils.showToast("订单已生成")
|
||||
}
|
||||
currentUserId = null
|
||||
isMember = false
|
||||
//ToastUtils.showToast("isKeepFaceState=$isKeepFaceState,mealPickupMode=$mealPickupMode")
|
||||
//|| isKeepFaceState
|
||||
if (mealPickupMode == 1) {
|
||||
step2FaceRecognizing(currentFood!!)
|
||||
isKeepFaceState = false
|
||||
} else {
|
||||
if (activity.settlementMode == 0) {
|
||||
activity.isAnalyzing = false
|
||||
step1FoodRecognizing()
|
||||
} else {
|
||||
if (mealPickupMode == 1) {
|
||||
step2FaceRecognizing(currentFood!!)
|
||||
isKeepFaceState = false
|
||||
} else {
|
||||
activity.isAnalyzing = false
|
||||
step1FoodRecognizing()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1198,9 +1224,7 @@ class MainScreenPresentation(
|
||||
/**
|
||||
* 人脸离开后调用创建订单接口
|
||||
*/
|
||||
fun createOrder(notEnoughOneBlock: () -> Unit = {}, block: () -> Unit) {
|
||||
////0-联合支付,1-独立支付
|
||||
//val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
|
||||
fun createOrder(notEnoughOneBlock: () -> Unit = {}, successBlock: () -> Unit) {
|
||||
//0-即放即取,1-余量计量
|
||||
mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
|
||||
//if (settlementMode == 0) {
|
||||
@@ -1231,9 +1255,9 @@ class MainScreenPresentation(
|
||||
userId = currentUserId,
|
||||
isMember = isMember ,
|
||||
notEnoughOneBlock = notEnoughOneBlock,
|
||||
block = {
|
||||
successBlock = {
|
||||
activity.runOnUiThread {
|
||||
block()
|
||||
successBlock()
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -1278,4 +1302,40 @@ class MainScreenPresentation(
|
||||
// }
|
||||
}
|
||||
|
||||
private var foodOrderList = mutableListOf<FoodItem>()
|
||||
private val foodOrderAdapter by lazy {
|
||||
FoodOrderAdapter(foodOrderList)
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载订单列表
|
||||
*/
|
||||
@SuppressLint("NotifyDataSetChanged", "SetTextI18n")
|
||||
private fun loadOrderList(userId: String) {
|
||||
binding.llTopInfo.gone()
|
||||
binding.flFoodDetail.visible()
|
||||
binding.detailInclude.let {
|
||||
it.root.updateLayoutParams {
|
||||
height = activity.screenSize[1]/2
|
||||
}
|
||||
it.tvFoodList.run {
|
||||
if (adapter == null) {
|
||||
layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
|
||||
adapter = foodOrderAdapter
|
||||
}
|
||||
}
|
||||
userViewModel.getFoodOrderList(userId) { model ->
|
||||
if (model == null) return@getFoodOrderList
|
||||
foodOrderList.clear()
|
||||
model.list?.let {
|
||||
foodOrderList.addAll(model.list)
|
||||
}
|
||||
foodOrderAdapter.notifyDataSetChanged()
|
||||
binding.detailInclude.tvTotalWeight.text = "总重量:${model.eatWeightSum}克"
|
||||
binding.detailInclude.tvTotalCalorie.text = "总热量:${model.calorie.roundToInt()}千卡"
|
||||
jointPaymentQueryFinish = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import com.sw.dualscreen.model.response.FaceData
|
||||
import com.sw.dualscreen.model.response.FoodInfo
|
||||
import com.sw.dualscreen.model.response.FoodSearchReq
|
||||
import com.sw.dualscreen.model.response.FoodOrder
|
||||
import com.sw.dualscreen.model.response.FoodOrderModel
|
||||
import com.sw.dualscreen.model.response.FoodVector
|
||||
import com.sw.dualscreen.model.response.MemberInfo
|
||||
import com.sw.dualscreen.model.response.UserFaceModel
|
||||
@@ -352,4 +353,10 @@ class RemoteRepository constructor(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getFoodOrderList(userId: String): ApiResponse<FoodOrderModel?> {
|
||||
return safeApiCall {
|
||||
apiService.getFoodOrderList(userId = userId)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import com.sw.dualscreen.model.response.DeviceConfig
|
||||
import com.sw.dualscreen.model.response.DinnerType
|
||||
import com.sw.dualscreen.model.response.FoodInfo
|
||||
import com.sw.dualscreen.model.response.FoodOrder
|
||||
import com.sw.dualscreen.model.response.FoodOrderModel
|
||||
import com.sw.dualscreen.model.response.FoodVector
|
||||
import com.sw.dualscreen.model.response.MemberInfo
|
||||
import com.sw.dualscreen.model.response.UserFaceModel
|
||||
@@ -620,4 +621,16 @@ class UserViewModel : BaseViewModel() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getFoodOrderList(userId: String, block: (FoodOrderModel?) -> Unit) {
|
||||
Timber.tag(TAG).d("getFoodOrderList")
|
||||
launchWithLoading {
|
||||
val response = repository.getFoodOrderList(userId)
|
||||
if (parseResponse(response)) {
|
||||
block(response.data)
|
||||
} else {
|
||||
block(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,8 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
android:orientation="vertical"
|
||||
tools:ignore="HardcodedText,UseCompatTextViewDrawableXml">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -19,7 +20,7 @@
|
||||
android:textSize="30sp"
|
||||
android:textStyle="bold"
|
||||
android:drawablePadding="17dp"
|
||||
app:drawableStartCompat="@drawable/ic_take_food" />
|
||||
android:drawableStart="@drawable/ic_take_food" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvUserName"
|
||||
@@ -49,6 +50,7 @@
|
||||
android:background="#FFDDE5F0" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/tvFoodList"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
@@ -69,7 +71,7 @@
|
||||
android:textSize="26sp"
|
||||
tools:text="总重量:680克"
|
||||
android:drawablePadding="17dp"
|
||||
app:drawableStartCompat="@drawable/ic_flag_weight" />
|
||||
android:drawableStart="@drawable/ic_flag_weight" />
|
||||
|
||||
<Space
|
||||
android:layout_width="0dp"
|
||||
@@ -84,7 +86,7 @@
|
||||
android:textSize="26sp"
|
||||
tools:text="总热量:793千卡"
|
||||
android:drawablePadding="17dp"
|
||||
app:drawableStartCompat="@drawable/ic_flag_calorie" />
|
||||
android:drawableStart="@drawable/ic_flag_calorie" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<!-- 菜品名称列,权重2.5 -->
|
||||
<TextView
|
||||
android:id="@+id/tvFoodName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2.5"
|
||||
android:text="菜品名称"
|
||||
android:textColor="#FF889AC2"
|
||||
android:textSize="26sp"
|
||||
android:paddingHorizontal="5dp"
|
||||
android:singleLine="true"
|
||||
android:gravity="center_vertical|start" />
|
||||
|
||||
<!-- 规格列,权重1.0 -->
|
||||
<TextView
|
||||
android:id="@+id/tvPriceNorm"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1.0"
|
||||
android:text="规格"
|
||||
android:textColor="#FF889AC2"
|
||||
android:textSize="26sp"
|
||||
android:paddingHorizontal="5dp"
|
||||
android:singleLine="true"
|
||||
android:gravity="center" />
|
||||
|
||||
<!-- 重量列,权重1.0 -->
|
||||
<TextView
|
||||
android:id="@+id/tvWeight"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1.0"
|
||||
android:text="重量(克)"
|
||||
android:textColor="#FF889AC2"
|
||||
android:textSize="26sp"
|
||||
android:paddingHorizontal="5dp"
|
||||
android:singleLine="true"
|
||||
android:gravity="center" />
|
||||
|
||||
<!-- 小计列,权重1.0 -->
|
||||
<TextView
|
||||
android:id="@+id/tvAmount"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1.0"
|
||||
android:text="小计(元)"
|
||||
android:textColor="#FF889AC2"
|
||||
android:textSize="26sp"
|
||||
android:paddingHorizontal="5dp"
|
||||
android:singleLine="true"
|
||||
android:gravity="center" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -13,13 +13,13 @@
|
||||
android:padding="28dp">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llSignlePage"
|
||||
android:id="@+id/llTopInfo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/setting_border"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="26dp"
|
||||
android:visibility="gone">
|
||||
android:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvFoodName"
|
||||
@@ -32,10 +32,10 @@
|
||||
android:textSize="40sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<!-- android:layout_width="300dp"-->
|
||||
<!-- android:layout_height="450dp"-->
|
||||
<!-- android:layout_width="330dp"-->
|
||||
<!-- android:layout_height="495dp"-->
|
||||
<!--android:layout_width="300dp"-->
|
||||
<!--android:layout_height="450dp"-->
|
||||
<!--android:layout_width="330dp"-->
|
||||
<!--android:layout_height="495dp"-->
|
||||
<FrameLayout
|
||||
android:id="@+id/flCameraView"
|
||||
android:layout_width="match_parent"
|
||||
@@ -189,14 +189,19 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<include
|
||||
android:id="@+id/detailInclude"
|
||||
<FrameLayout
|
||||
android:id="@+id/flFoodDetail"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/setting_border"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="26dp"
|
||||
layout="@layout/layout_eat_detail"/>
|
||||
android:paddingHorizontal="15dp"
|
||||
android:visibility="gone">
|
||||
|
||||
<include
|
||||
android:id="@+id/detailInclude"
|
||||
layout="@layout/layout_eat_detail"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/flBottomView"
|
||||
|
||||
Reference in New Issue
Block a user