联合支付模式使用人脸识别生成就餐记录

This commit is contained in:
2026-03-19 14:19:20 +08:00
parent a6d2441704
commit b51be58c64
8 changed files with 176 additions and 24 deletions
@@ -68,4 +68,5 @@ object GlobalKey {
const val KEY_USER_INFO = "userInfoKey" const val KEY_USER_INFO = "userInfoKey"
const val KEY_PICKUP_MODE = "pickupMode" const val KEY_PICKUP_MODE = "pickupMode"
const val KEY_CHARGE_MODE = "chargeMode" const val KEY_CHARGE_MODE = "chargeMode"
const val KEY_SETTLEMENT_MODE = "settlementMode"
} }
@@ -9,6 +9,7 @@ import androidx.activity.viewModels
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.sw.dualscreen.GlobalData import com.sw.dualscreen.GlobalData
import com.sw.dualscreen.GlobalKey
import com.sw.dualscreen.databinding.ActivityInitBinding import com.sw.dualscreen.databinding.ActivityInitBinding
import com.sw.dualscreen.dialog.RemindDialog import com.sw.dualscreen.dialog.RemindDialog
import com.sw.dualscreen.ext.clickWithDebounce import com.sw.dualscreen.ext.clickWithDebounce
@@ -18,6 +19,7 @@ import com.sw.dualscreen.objbox.Food
import com.sw.dualscreen.objbox.FoodModule import com.sw.dualscreen.objbox.FoodModule
import com.sw.dualscreen.objbox.ObjectBox import com.sw.dualscreen.objbox.ObjectBox
import com.sw.dualscreen.utils.L import com.sw.dualscreen.utils.L
import com.sw.dualscreen.utils.SPUtil
import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.dualscreen.viewmodel.BaseViewModel
import com.sw.dualscreen.viewmodel.UserViewModel import com.sw.dualscreen.viewmodel.UserViewModel
import com.sw.plate.utils.AppUtil import com.sw.plate.utils.AppUtil
@@ -110,6 +112,10 @@ class InitActivity : BaseActivity<ActivityInitBinding>() {
override fun initialize() { override fun initialize() {
super.initialize() super.initialize()
// TODO: 暂时写死,后续改为从接口获取结算类型 ------------------------------------------
val settlementMode = 0
SPUtil.getInstance().put(GlobalKey.KEY_SETTLEMENT_MODE, settlementMode)
registerKeyEvent() registerKeyEvent()
initNetworkTimer() initNetworkTimer()
binding.okButton.clickWithDebounce(500) { binding.okButton.clickWithDebounce(500) {
@@ -117,7 +117,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
checkedItem = item checkedItem = item
notifyDataSetChanged() notifyDataSetChanged()
updateCurrentFood(item) updateCurrentFood(item)
//0-计费,1-不计费
val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
//不计费模式切换菜品,重新加载数据 //不计费模式切换菜品,重新加载数据
if (mode == 1) { if (mode == 1) {
@@ -595,11 +595,13 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
} }
} }
} }
//根据付费模式确认是否显示按钮 //根据付费模式确认是否显示按钮
binding.btnPay.run { binding.btnPay.run {
val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) //0-计费,1-不计费
if (mode == 0) visible() else gone() 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()
} }
} }
@@ -634,16 +636,26 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
lastTouchTime = System.currentTimeMillis() lastTouchTime = System.currentTimeMillis()
} }
fun joinPayment() {
}
fun createOrder( fun createOrder(
foodInfo: FoodInfo, foodInfo: FoodInfo,
foodWeight: Int, foodWeight: Int,
eatWeight: Int, eatWeight: Int,
eatNum: Int, eatNum: Int,
userId: String?, userId: String?,
isMember:Boolean,
notEnoughOneBlock: () -> Unit = {}, notEnoughOneBlock: () -> Unit = {},
block: () -> Unit block: () -> Unit
) { ) {
log("foodWeight=$foodWeight,eatWeight=$eatWeight") 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-余量计量
val pickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 val pickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
// if (pickupMode == 0) { // if (pickupMode == 0) {
// if (foodWeight <= 5) { // if (foodWeight <= 5) {
@@ -661,7 +673,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
return return
} }
showWaitingDialog("加载中,请稍候……") showWaitingDialog("加载中,请稍候……")
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
val order = FoodOrder( val order = FoodOrder(
deviceId = GlobalData.deviceId, deviceId = GlobalData.deviceId,
foodId = foodInfo.foodId, foodId = foodInfo.foodId,
@@ -675,7 +686,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
userId = userId, userId = userId,
notPay = chargeMode != 0, notPay = chargeMode != 0,
//即放即取-1,称重-2 //即放即取-1,称重-2
mode = if (pickupMode == 1) 1 else 2 mode = if (pickupMode == 1) 1 else 2,
paymentFrom = if (settlementMode == 0) 1 else 2,
member = isMember
) )
submitOrder(order, block) submitOrder(order, block)
} }
@@ -734,6 +747,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
fun onPaySuccessEvent(event: PaySuccessEvent) { fun onPaySuccessEvent(event: PaySuccessEvent) {
isRefreshPage = true isRefreshPage = true
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) ?: 0 val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) ?: 0
presentation?.hideNutritionView(chargeMode) presentation?.hideNutritionView(chargeMode)
presentation?.cancel() presentation?.cancel()
@@ -768,7 +782,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
} }
//val realWeight = (lastWeight * 1000).roundToInt() //val realWeight = (lastWeight * 1000).roundToInt()
//0-即放即取,1-余量计量
val mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 val mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) ?: 0 val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) ?: 0
var foodWeight = 0.0 var foodWeight = 0.0
var eatWeight = 0.0 var eatWeight = 0.0
@@ -802,6 +818,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
eatWeight = eatWeight.roundToInt(), eatWeight = eatWeight.roundToInt(),
eatNum = eatNum, eatNum = eatNum,
userId = null, userId = null,
isMember = false
) { ) {
isRefreshPage = false isRefreshPage = false
shutdownCamera() shutdownCamera()
@@ -1035,9 +1052,12 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
log("registerDataChange photoUri 识别数据名称:$foodName") log("registerDataChange photoUri 识别数据名称:$foodName")
runOnUiThread { runOnUiThread {
binding.flPay.run { binding.flPay.run {
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) //0-联合支付,1-独立支付
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
//0-计费,1-不计费 //0-计费,1-不计费
if (chargeMode == 0) visible() else gone() val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
//独立支付+计费模式才显示“去结算”按钮,否则使用人脸识别
if (settlementMode == 1 && chargeMode == 0) visible() else gone()
} }
} }
if (TextUtils.isEmpty(foodName)) { if (TextUtils.isEmpty(foodName)) {
@@ -287,6 +287,7 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
} }
fun bindOrder(userId: String, block: (Boolean) -> Unit) { fun bindOrder(userId: String, block: (Boolean) -> Unit) {
//0-即放即取,1-余量计量
val pickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) val pickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0)
val mode = if (pickupMode == 1) 1 else 2 val mode = if (pickupMode == 1) 1 else 2
userViewModel.bindOrder(userId, foodOrderId, mode = mode) { bindResult -> userViewModel.bindOrder(userId, foodOrderId, mode = mode) { bindResult ->
@@ -19,19 +19,21 @@ class BusinessFragment: BaseFragment<FragmentBusinessBinding>() {
} }
override fun initialize() { override fun initialize() {
binding.rgSettlement.let {
//val settlementMode = if (binding.rgSettlement.checkedRadioButtonId == R.id.rbJointPayment) 0 else 1
val mode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
it.check(if (mode == 0) R.id.rbJointPayment else R.id.rbIndependentPayment)
binding.rbJointPayment.isEnabled = false
binding.rbIndependentPayment.isEnabled = false
}
binding.rgCharge.let { binding.rgCharge.let {
// it.setOnCheckedChangeListener { group, checkedId -> //0-计费,1-不计费
// val mode = if (checkedId == R.id.rbChargeYes) 0 else 1
// SPUtil.getInstance().put(GlobalKey.KEY_CHARGE_MODE, mode)
// }
val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
it.check(if (mode == 0) R.id.rbChargeYes else R.id.rbChargeNot) it.check(if (mode == 0) R.id.rbChargeYes else R.id.rbChargeNot)
} }
binding.rgTakeFood.let { binding.rgTakeFood.let {
// it.setOnCheckedChangeListener { group, checkedId -> //0-即放即取,1-余量计量
// val mode = if (checkedId == R.id.rbPickAndPlace) 0 else 1
// SPUtil.getInstance().put(GlobalKey.KEY_PICKUP_MODE, mode)
// }
val mode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) val mode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0)
it.check(if (mode == 0) R.id.rbPickAndPlace else R.id.rbSurplusCalculate) it.check(if (mode == 0) R.id.rbPickAndPlace else R.id.rbSurplusCalculate)
} }
@@ -39,6 +41,10 @@ class BusinessFragment: BaseFragment<FragmentBusinessBinding>() {
SensorScaleUtils.tare() SensorScaleUtils.tare()
} }
binding.btnConfirm.setOnClickListener { v -> binding.btnConfirm.setOnClickListener { v ->
// if (binding.rgSettlement.checkedRadioButtonId == -1) {
// ToastUtils.showToast("请设置结算模式")
// return@setOnClickListener
// }
if (binding.rgCharge.checkedRadioButtonId == -1) { if (binding.rgCharge.checkedRadioButtonId == -1) {
ToastUtils.showToast("请设置计费模式") ToastUtils.showToast("请设置计费模式")
return@setOnClickListener return@setOnClickListener
@@ -50,6 +56,7 @@ class BusinessFragment: BaseFragment<FragmentBusinessBinding>() {
val chargeMode = if (binding.rgCharge.checkedRadioButtonId == R.id.rbChargeYes) 0 else 1 val chargeMode = if (binding.rgCharge.checkedRadioButtonId == R.id.rbChargeYes) 0 else 1
//原来的支付模式 //原来的支付模式
//0-计费,1-不计费
val oldChargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) val oldChargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
if (chargeMode != oldChargeMode) { if (chargeMode != oldChargeMode) {
//支付模式有变化通知首页页面刷新 //支付模式有变化通知首页页面刷新
@@ -34,7 +34,11 @@ data class FoodOrder(
var remark: String? = "", var remark: String? = "",
//即放即取-1,称重-2 //即放即取-1,称重-2
var mode: Int var mode: Int,
//设备模式,1 结算终端,2档口机
var paymentFrom: Int,
//是否会员
var member: Boolean
) )
@Parcelize @Parcelize
@@ -114,6 +114,7 @@ class MainScreenPresentation(
var isKeepFaceState = false var isKeepFaceState = false
var currentUserId: String? = null var currentUserId: String? = null
var isMember: Boolean = false
var facePreviewInfoList: MutableList<FacePreviewInfo>? = null var facePreviewInfoList: MutableList<FacePreviewInfo>? = null
@@ -121,11 +122,15 @@ class MainScreenPresentation(
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = PresentationMainScreenBinding.inflate(layoutInflater) binding = PresentationMainScreenBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
//0-即放即取,1-余量计量
mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
window?.setBackgroundDrawableResource(android.R.color.white) window?.setBackgroundDrawableResource(android.R.color.white)
initView() initView()
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
if (chargeMode == 1) { //0-联合支付,1-独立支付
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
if (settlementMode == 0 || chargeMode == 1) {
setupArcCamera() setupArcCamera()
} }
registerDataChange() registerDataChange()
@@ -138,7 +143,9 @@ class MainScreenPresentation(
lastWeight = weight * 1000 // 将千克转成克 lastWeight = weight * 1000 // 将千克转成克
Timber.tag(TAG) Timber.tag(TAG)
.d("updateWeight lastWeight = $weight, currentStep = $currentStep, isGoStep1 = $isGoStep1") .d("updateWeight lastWeight = $weight, currentStep = $currentStep, isGoStep1 = $isGoStep1")
//0-即放即取,1-余量计量
mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
// if (mealPickupMode == 1 && chargeMode == 0) { // if (mealPickupMode == 1 && chargeMode == 0) {
// //余量计量+计费模式 // //余量计量+计费模式
@@ -586,6 +593,9 @@ class MainScreenPresentation(
binding.tvFoodName.text = foodInfo.foodName binding.tvFoodName.text = foodInfo.foodName
binding.ivPreviewImage.gone() binding.ivPreviewImage.gone()
binding.ivFrame.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) val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
if (chargeMode == 0) { if (chargeMode == 0) {
binding.ivRecImage.let { binding.ivRecImage.let {
@@ -597,17 +607,21 @@ class MainScreenPresentation(
} else { } else {
binding.ivRecImage.gone() binding.ivRecImage.gone()
} }
val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) //独立支付+计费模式,使用人脸识别
if (mode == 0) { if (settlementMode == 1 && chargeMode == 0) {
//计费,查询营养信息、价格信息------------------------ //计费,查询营养信息、价格信息------------------------
loadBilledMode() loadBilledMode()
} else { } else {
//不计费 //联合支付,进行人脸识别
//开启人脸识别 if (settlementMode == 0) {
step2FaceRecognizing(foodInfo)
} else {
//不计费,开启人脸识别
if (currentStep == 1 || binding.tvFaceTip.isVisible.not()) { if (currentStep == 1 || binding.tvFaceTip.isVisible.not()) {
step2FaceRecognizing(foodInfo) step2FaceRecognizing(foodInfo)
} }
} }
}
//if (currentStep == 1) { //if (currentStep == 1) {
// step2FaceRecognizing(foodInfo) // step2FaceRecognizing(foodInfo)
//} else { //} else {
@@ -785,7 +799,10 @@ class MainScreenPresentation(
fun resumeCamera() { fun resumeCamera() {
Timber.tag(TAG).d("resumeCamera isRecognition = $isRecognition") Timber.tag(TAG).d("resumeCamera isRecognition = $isRecognition")
isRecognition = true isRecognition = true
if (rgbCameraHelper != null && rgbCameraHelper!!.isStopped) { if (rgbCameraHelper == null) {
setupArcCamera()
rgbCameraHelper!!.start()
} else if (rgbCameraHelper!!.isStopped) {
rgbCameraHelper!!.start() rgbCameraHelper!!.start()
} }
} }
@@ -859,6 +876,7 @@ class MainScreenPresentation(
val faceEntity = compareResult.faceEntity val faceEntity = compareResult.faceEntity
val userId = faceEntity.userName val userId = faceEntity.userName
currentUserId = userId currentUserId = userId
isMember = faceEntity.userType == "1"
isAgainLoadData = false isAgainLoadData = false
if (userId == null) return@Observer if (userId == null) return@Observer
//ToastUtils.showToast("人脸识别成功,userId = $userId") //ToastUtils.showToast("人脸识别成功,userId = $userId")
@@ -978,6 +996,7 @@ class MainScreenPresentation(
} }
if (facePreviewInfoList.isNullOrEmpty()) { if (facePreviewInfoList.isNullOrEmpty()) {
currentUserId = null currentUserId = null
isMember = false
} }
//recognizeViewModel.clearLeftFace(facePreviewInfoList) //recognizeViewModel.clearLeftFace(facePreviewInfoList)
clearLeftFaceData() clearLeftFaceData()
@@ -1139,6 +1158,7 @@ class MainScreenPresentation(
.d("listIsEmpty=$listIsEmpty,lastFaceTrackId=$lastFaceTrackId,listFirstTrackId=$listFirstTrackId") .d("listIsEmpty=$listIsEmpty,lastFaceTrackId=$lastFaceTrackId,listFirstTrackId=$listFirstTrackId")
if (listIsEmpty || (lastFaceTrackId != listFirstTrackId)) { if (listIsEmpty || (lastFaceTrackId != listFirstTrackId)) {
if (lastFaceTrackId != -1 && currentUserId != null) { if (lastFaceTrackId != -1 && currentUserId != null) {
//0-即放即取,1-余量计量
mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
Timber.tag(TAG).i("$lastFaceTrackId 用户离开") Timber.tag(TAG).i("$lastFaceTrackId 用户离开")
lastFaceTrackId = -1 lastFaceTrackId = -1
@@ -1159,6 +1179,7 @@ class MainScreenPresentation(
ToastUtils.showToast("订单已生成") ToastUtils.showToast("订单已生成")
} }
currentUserId = null currentUserId = null
isMember = false
//ToastUtils.showToast("isKeepFaceState=$isKeepFaceState,mealPickupMode=$mealPickupMode") //ToastUtils.showToast("isKeepFaceState=$isKeepFaceState,mealPickupMode=$mealPickupMode")
//|| isKeepFaceState //|| isKeepFaceState
if (mealPickupMode == 1) { if (mealPickupMode == 1) {
@@ -1173,8 +1194,19 @@ class MainScreenPresentation(
} }
} }
/**
* 人脸离开后调用创建订单接口
*/
fun createOrder(notEnoughOneBlock: () -> Unit = {}, block: () -> Unit) { fun createOrder(notEnoughOneBlock: () -> Unit = {}, block: () -> Unit) {
////0-联合支付,1-独立支付
//val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
//0-即放即取,1-余量计量
mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
//if (settlementMode == 0) {
// //使用联合支付方式
// ToastUtils.showToast("使用联合支付方式")
// return
//}
val eatWeight = if (mealPickupMode == 0) { val eatWeight = if (mealPickupMode == 0) {
//即放即取 //即放即取
recognitionWeight recognitionWeight
@@ -1196,6 +1228,7 @@ class MainScreenPresentation(
eatWeight = eatWeight.roundToInt(), eatWeight = eatWeight.roundToInt(),
eatNum = activity.getEatNum(eatWeight, currentFood!!.specWeight), eatNum = activity.getEatNum(eatWeight, currentFood!!.specWeight),
userId = currentUserId, userId = currentUserId,
isMember = isMember ,
notEnoughOneBlock = notEnoughOneBlock, notEnoughOneBlock = notEnoughOneBlock,
block = { block = {
activity.runOnUiThread { activity.runOnUiThread {
@@ -6,6 +6,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<!-- 结算设置模块 -->
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -16,6 +17,85 @@
android:paddingTop="35dp" android:paddingTop="35dp"
android:paddingBottom="42dp"> android:paddingBottom="42dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="17dp"
android:text="结算设置"
android:textColor="@color/black"
android:textSize="36sp"
android:textStyle="bold"
app:drawableStartCompat="@drawable/line_shape" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(不允许修改,由后端配置)"
android:textColor="#FFFF3232"
android:textSize="20sp" />
</LinearLayout>
<RadioGroup
android:id="@+id/rgSettlement"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="35dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rbJointPayment"
android:layout_width="0dp"
android:layout_height="120dp"
android:layout_weight="1"
android:background="@drawable/setting_check_selector"
android:button="@null"
android:gravity="center"
android:maxLines="1"
android:text="联合支付"
android:textColor="@color/setting_radio"
android:textSize="30sp"
android:textStyle="bold" />
<RadioButton
android:id="@+id/rbIndependentPayment"
android:layout_width="0dp"
android:layout_height="120dp"
android:layout_marginStart="32dp"
android:layout_weight="1"
android:background="@drawable/setting_check_selector"
android:button="@null"
android:gravity="center"
android:maxLines="1"
android:text="独立支付"
android:textColor="@color/setting_radio"
android:textSize="30sp"
android:textStyle="bold"
tools:checked="true" />
</RadioGroup>
</LinearLayout>
<!-- 计费设置模块 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/setting_border"
android:orientation="vertical"
android:layout_marginHorizontal="32dp"
android:layout_marginTop="42dp"
android:paddingHorizontal="32dp"
android:paddingTop="35dp"
android:paddingBottom="42dp">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"