diff --git a/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt index 60e1838..ca5289e 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt @@ -17,9 +17,11 @@ import com.sw.dualscreen.objbox.FoodModule import com.sw.dualscreen.utils.FoodVectorTool import com.sw.dualscreen.utils.L import com.sw.dualscreen.utils.NetworkUtils +import com.sw.dualscreen.utils.SpTool import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.dualscreen.viewmodel.UserViewModel import com.sw.plate.utils.AppUtil +import com.sw.plate.utils.ToastUtils import kotlinx.coroutines.launch class InitActivity : BaseActivity() { @@ -180,11 +182,32 @@ class InitActivity : BaseActivity() { loadNetworkErrorDialog() return } + getDeviceConfig() getCollectedFoodVector() } } } + private fun getDeviceConfig() { + userViewModel.getDeviceConfig { deviceConfig -> + runOnUiThread { + if (deviceConfig == null) { + ToastUtils.showToast("获取设备配置数据失败") + return@runOnUiThread + } + var settlementMode = 1 + //结算模式:1-独立支付,2-联合结算 + //settlementMode = if (deviceConfig.payType == 2) 0 else 1 + // TODO: 2022/10/13 修改为独立支付 + SpTool.settlementMode = settlementMode + + GlobalData.appId = deviceConfig.arcsoftAppId ?: "" + GlobalData.sdkKey = deviceConfig.arcsoftSdkKey ?: "" + GlobalData.activeKey = deviceConfig.arcsoftActiveKey ?: "" + } + } + } + private fun loadNetworkErrorDialog() { RemindDialog( context = context, diff --git a/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt index e97ddb5..4753028 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt @@ -86,6 +86,7 @@ import okhttp3.RequestBody.Companion.toRequestBody import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import org.json.JSONObject +import timber.log.Timber import java.io.File import java.time.LocalDateTime import java.time.ZoneId @@ -200,6 +201,7 @@ class MainActivity : BaseActivity() { override fun initialize() { super.initialize() + settlementMode = SpTool.settlementMode isPageVisible = true // 拦截扫码枪按键事件,防止触发页面按钮点击 registerKeyEvent() @@ -212,9 +214,10 @@ class MainActivity : BaseActivity() { initData() } - private fun initLayoutEatDetailBinding(mode: Int) { + private fun initLayoutEatDetailBinding() { + Timber.tag(TAG).d("initLayoutEatDetailBinding,settlementMode=$settlementMode") binding.flFoodList.removeAllViews() - if (mode == 0) { + if (settlementMode == 0) { //联合支付 val b = LayoutMainFoodList2Binding.inflate(layoutInflater, binding.flFoodList, true) rvFoodList = b.rvFoodList @@ -255,25 +258,8 @@ class MainActivity : BaseActivity() { } private fun initView() { - initLayoutEatDetailBinding(SpTool.settlementMode) - viewModel.getDeviceConfig { deviceConfig -> - runOnUiThread { - if (deviceConfig == null) { - ToastUtils.showToast("获取设备配置数据失败") - initLayoutEatDetailBinding(SpTool.settlementMode) - return@runOnUiThread - } - //结算模式:1-独立支付,2-联合结算 - settlementMode = if (deviceConfig.payType == 2) 0 else 1 - SpTool.settlementMode = settlementMode - - GlobalData.appId = deviceConfig.arcsoftAppId ?: "" - GlobalData.sdkKey = deviceConfig.arcsoftSdkKey ?: "" - GlobalData.activeKey = deviceConfig.arcsoftActiveKey ?: "" - viewModel.activeEngine() - initLayoutEatDetailBinding(settlementMode) - } - } + viewModel.activeEngine() + initLayoutEatDetailBinding() updateDateTime() binding.tvTitleTime.setOnClickListener { EnvSwitchDialog(context = this, onEnvChanged = { diff --git a/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt index d0d75f5..5055ced 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt @@ -166,6 +166,8 @@ class PayActivity : BaseActivity() { super.onDestroy() } + var memberDiscount = 1.0 + var memberInfo: MemberInfo? = null fun showPayInfo(type: Int = 1, isVip: Boolean = false, memberInfo: MemberInfo? = null) { this.memberInfo = memberInfo @@ -191,9 +193,19 @@ class PayActivity : BaseActivity() { it.type = type it.foodName = foodInfo?.foodName //确认使用vipPrice 还是 specPrice - val onePrice = if (isVip) foodInfo?.vipPrice else foodInfo?.specPrice - it.totalPrice = (onePrice ?: 0.0) * eatNum - presentation.initView() + //val onePrice = if (isVip) foodInfo?.vipPrice else foodInfo?.specPrice + if (isVip) { + userViewModel.getMemberDiscount(memberInfo?.faceUserId?:"") { discount -> + memberDiscount = if (discount == null) 1.0 else discount / 10 + var onePrice = foodInfo?.specPrice ?: 0.0 + onePrice = if (isVip) onePrice * memberDiscount else onePrice + it.totalPrice = onePrice * eatNum + presentation.initView() + } + } else { + it.totalPrice = (foodInfo?.specPrice ?: 0.0) * eatNum + presentation.initView() + } } } diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/FacePayFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/FacePayFragment.kt index beb93cc..3c8ccf0 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/FacePayFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/FacePayFragment.kt @@ -23,7 +23,9 @@ class FacePayFragment : BaseFragment() { // } payActivity.foodInfo?.let { foodName = it.foodName - payAmount = (it.vipPrice ?: 0.0) * payActivity.eatNum +// payAmount = (it.vipPrice ?: 0.0) * payActivity.eatNum + val price = it.specPrice ?: 0.0 + payAmount = price * payActivity.memberDiscount * payActivity.eatNum } showSubScreen() } diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/PayResultFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/PayResultFragment.kt index 6848e3a..e96605f 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/PayResultFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/PayResultFragment.kt @@ -75,7 +75,9 @@ class PayResultFragment : BaseFragment() { } if (memberInfo != null && memberInfo!!.member) { - totalPrice = (payActivity.foodInfo?.vipPrice ?: 0.0) * payActivity.eatNum +// totalPrice = (payActivity.foodInfo?.vipPrice ?: 0.0) * payActivity.eatNum + val price = payActivity.foodInfo?.specPrice ?: 0.0 + totalPrice = price * payActivity.memberDiscount * payActivity.eatNum binding.layoutVip.visible() balance = (memberInfo!!.topUpBalance ?: 0.0) + (memberInfo!!.rewardBalance ?: 0.0) realPayPrice = if (balance >= totalPrice) 0.0 else totalPrice - balance diff --git a/app/src/main/java/com/sw/dualscreen/network/api/ApiService.kt b/app/src/main/java/com/sw/dualscreen/network/api/ApiService.kt index ed4a106..d486e87 100644 --- a/app/src/main/java/com/sw/dualscreen/network/api/ApiService.kt +++ b/app/src/main/java/com/sw/dualscreen/network/api/ApiService.kt @@ -321,4 +321,13 @@ interface ApiService { @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/settlement/terminal/app/getFoodInfoBySettlement", @Query("userId") userId: String ): ApiResponse + + /** + * 查询会员折扣 + */ + @GET + suspend fun getMemberDiscount( + @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/common/app/getMemberDiscount", + @Query("userId") userId: String + ): ApiResponse } \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt b/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt index 9db263b..6f1a651 100644 --- a/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt +++ b/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt @@ -69,6 +69,7 @@ import kotlin.math.abs import kotlin.math.max import kotlin.math.roundToInt +@SuppressLint("NotifyDataSetChanged", "SetTextI18n") class MainScreenPresentation( val activity: MainActivity, display: Display, @@ -338,6 +339,7 @@ class MainScreenPresentation( } private val step3Debouncer = Debouncer(10*1000) + private var memberDiscount:Double = 1.0 /** * 根据接口数据更新热量、营养数据 @@ -464,7 +466,6 @@ class MainScreenPresentation( /** * 餐品识别成功,不计费模式 */ - @SuppressLint("SetTextI18n") fun loadUnbilledMode() { if (currentUserId.isNullOrBlank()) { return @@ -685,7 +686,7 @@ class MainScreenPresentation( private var lastAddWeight = 0 private fun addFoodToOrder(weight: Int, foodInfo: FoodInfo) { - Log.d(TAG, "addFoodToOrder: ${weight == lastAddWeight}") + Timber.tag(TAG) .d("addFoodToOrder: ${weight == lastAddWeight}") // if (weight == lastAddWeight) return lastAddWeight = weight if (weight <= 10) { @@ -701,9 +702,10 @@ class MainScreenPresentation( } return } - val foodPrice = if (isMember) foodInfo.vipPrice else foodInfo.specPrice + //val foodPrice = if (isMember) foodInfo.vipPrice else foodInfo.specPrice + val foodPrice = (foodInfo.specPrice ?: 0.0) * memberDiscount val eatNum = activity.getEatNum(weight.toDouble(), foodInfo.specWeight) - val price = eatNum * (foodPrice ?: 0.0) + val price = eatNum * foodPrice if (foodOrderList.isNotEmpty() && mealPickupMode == 1) { val last = foodOrderList.last() if (last.isLocalData) { @@ -732,8 +734,7 @@ class MainScreenPresentation( ) // foodOrderAdapter.submitList(foodOrderList) foodOrderAdapter.notifyDataSetChanged() - Log.d( - TAG, + Timber.tag(TAG) .d( "addFoodToOrder: size=${foodOrderList.size},新增数据:${foodOrderList.last()}" ) //foodOrderAdapter.notifyDataSetChanged() @@ -742,7 +743,7 @@ class MainScreenPresentation( eatWeightSum += it.num } binding.detailInclude.tvTotalWeight.text = "总重量:${eatWeightSum}克" - Log.d(TAG, "addFoodToOrder: 更新总重量,新增数据------------------------------") + Timber.tag(TAG) .d("addFoodToOrder: 更新总重量,新增数据------------------------------") } private fun calculateNutrition(value: Int) { @@ -1031,7 +1032,11 @@ class MainScreenPresentation( } } // pauseCamera() - step3ShowRecognizeResult(userId) + //先查询会员折扣 + userViewModel.getMemberDiscount(userId) { discount -> + memberDiscount = if (discount == null) 1.0 else discount / 10 + step3ShowRecognizeResult(userId) + } }) recognizeViewModel.drawRectInfoText.observe(activity, Observer { info -> @@ -1471,7 +1476,6 @@ class MainScreenPresentation( /** * 加载订单列表 */ - @SuppressLint("NotifyDataSetChanged", "SetTextI18n") private fun loadOrderList(userId: String, callback: () -> Unit) { binding.llTopInfo.gone() binding.flFoodDetail.visible() @@ -1489,7 +1493,7 @@ class MainScreenPresentation( //foodOrderAdapter.submitList(foodOrderList) foodOrderAdapter.notifyDataSetChanged() //binding.detailInclude.tvTotalWeight.text = "总重量:${model.eatWeightSum}克" - Log.d(TAG, "addFoodToOrder: 更新总重量,订单列表------------------------------") + Timber.tag(TAG).d("addFoodToOrder: 更新总重量,订单列表------------------------------") // binding.detailInclude.tvTotalCalorie.text = "总热量:${model.calorie.roundedDecimalPlace(1)}千卡" jointPaymentQueryFinish = true diff --git a/app/src/main/java/com/sw/dualscreen/repository/RemoteRepository.kt b/app/src/main/java/com/sw/dualscreen/repository/RemoteRepository.kt index c405deb..0e95ad3 100644 --- a/app/src/main/java/com/sw/dualscreen/repository/RemoteRepository.kt +++ b/app/src/main/java/com/sw/dualscreen/repository/RemoteRepository.kt @@ -359,4 +359,10 @@ class RemoteRepository constructor( apiService.getFoodOrderList(userId = userId) } } + + suspend fun getMemberDiscount(userId: String): ApiResponse { + return safeApiCall { + apiService.getMemberDiscount(userId = userId) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt b/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt index 541ccce..d4b311d 100644 --- a/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt +++ b/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt @@ -651,4 +651,16 @@ class UserViewModel : BaseViewModel() { } } } + + fun getMemberDiscount(userId: String, block: (Double?) -> Unit) { + Timber.tag(TAG).d("getMemberDiscount") + launchWithLoading { + val response = repository.getMemberDiscount(userId) + if (parseResponse(response)) { + block(response.data) + } else { + block(null) + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/layout_main_food_list.xml b/app/src/main/res/layout/layout_main_food_list.xml index 2cfbb2d..9cb6b4b 100644 --- a/app/src/main/res/layout/layout_main_food_list.xml +++ b/app/src/main/res/layout/layout_main_food_list.xml @@ -1,42 +1,44 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto"> - + + - \ No newline at end of file + \ No newline at end of file