Commit 0ce94962 authored by shiyl's avatar shiyl

联调选择自提点

parent 2b23c402
...@@ -27,4 +27,7 @@ object IntentConstants { ...@@ -27,4 +27,7 @@ object IntentConstants {
// 自提点id // 自提点id
const val KEY_EXTRA_PICKUP_POINT_ID = "pickupPointId" const val KEY_EXTRA_PICKUP_POINT_ID = "pickupPointId"
// 确认订单进选择优惠券列表
const val KEY_EXTRA_COUPON_LIST = "couponList"
} }
...@@ -7,9 +7,9 @@ import kotlinx.parcelize.Parcelize ...@@ -7,9 +7,9 @@ import kotlinx.parcelize.Parcelize
@Parcelize @Parcelize
data class OrderConfirmResDto( data class OrderConfirmResDto(
@SerializedName("coupon_list") @SerializedName("coupon_list")
val couponDto: List<CouponDto>? = null, val couponList: List<CouponDto>? = null,
@SerializedName("goods_list") @SerializedName("goods_list")
val goodsDto: List<GoodsDto>? = null, val goodsList: List<GoodsDto>? = null,
@SerializedName("shipping") @SerializedName("shipping")
val shipping: Shipping? = null, val shipping: Shipping? = null,
) : Parcelable ) : Parcelable
...@@ -24,14 +24,16 @@ data class CouponDto( ...@@ -24,14 +24,16 @@ data class CouponDto(
val amount: String? = null,// 优惠券金额 val amount: String? = null,// 优惠券金额
@SerializedName("desc") @SerializedName("desc")
val desc: String? = null,// 优惠券描述 val desc: String? = null,// 优惠券描述
// @SerializedName("desc") @SerializedName("scope_use")
// val desc: String? = null,// 优惠券使用门槛 val scopeUse: String? = null,// 优惠券使用门槛
@SerializedName("start_time") @SerializedName("start_time")
val startTime: String? = null,// 有效期开始时间 val startTime: String? = null,// 有效期开始时间
@SerializedName("end_time") @SerializedName("end_time")
val endTime: String? = null,// 有效期结束时间 val endTime: String? = null,// 有效期结束时间
@SerializedName("status") @SerializedName("status")
val status: Int? = null,// 优惠券状态 val status: Int? = null,// 优惠券状态
@SerializedName("selected")
var selected: Boolean? = false,// 优惠券是否被选中
) : Parcelable ) : Parcelable
/** /**
...@@ -54,24 +56,18 @@ data class GoodsDto( ...@@ -54,24 +56,18 @@ data class GoodsDto(
*/ */
@Parcelize @Parcelize
data class Shipping( data class Shipping(
@SerializedName("create_time")
val createTime: String? = null,
@SerializedName("order_id")
val orderId: String? = null,// 订单id
@SerializedName("receiver_address")
val receiverAddress: String? = null,// 收获地址
@SerializedName("receiver_mobile") @SerializedName("receiver_mobile")
val receiverMobile: String? = null,// 收货人手机号 val receiverMobile: String? = null,// 收货人手机号
@SerializedName("receiver_name") @SerializedName("receiver_name")
val receiverName: String? = null,// 收货人姓名 val receiverName: String? = null,// 收货人姓名
@SerializedName("shipping_id")
val shippingId: String? = null,
@SerializedName("take_place_id") @SerializedName("take_place_id")
val takePlaceId: Int? = null, var takePlaceId: Long? = null,// 自提点id
@SerializedName("take_place_name") @SerializedName("take_place_name")
val takePlaceName: String? = null, var takePlaceName: String? = null,// 自提点名称
@SerializedName("update_time") @SerializedName("contact_name")
val updateTime: String? = null, var contactName: String? = null,// 自提点联系人
@SerializedName("user_id") @SerializedName("phone")
val userId: String? = null var phone: String? = null,// 自提点电话
@SerializedName("address")
var address: String? = null,// 自提点地址
) : Parcelable ) : Parcelable
...@@ -2,24 +2,29 @@ package com.yidian.shenghuoquan.border.ui ...@@ -2,24 +2,29 @@ package com.yidian.shenghuoquan.border.ui
import android.content.Intent import android.content.Intent
import androidx.activity.viewModels import androidx.activity.viewModels
import com.yidian.bcommon.constant.IntentConstants
import com.yidian.bcommon.constant.XEventConfig import com.yidian.bcommon.constant.XEventConfig
import com.yidian.bcommon.constant.XRouterPathConstants import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseMvvmActivity import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.shenghuoquan.border.R import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.adapter.OrderConfirmCommodityListAdapter import com.yidian.shenghuoquan.border.adapter.OrderConfirmCommodityListAdapter
import com.yidian.shenghuoquan.border.databinding.BorderActivityConfirmOrderBinding import com.yidian.shenghuoquan.border.databinding.BorderActivityConfirmOrderBinding
import com.yidian.shenghuoquan.border.dto.CouponDto import com.yidian.shenghuoquan.border.dto.PickupPoint
import com.yidian.shenghuoquan.border.dto.Shipping import com.yidian.shenghuoquan.border.dto.Shipping
import com.yidian.xarc.xevent.XBaseEvent import com.yidian.xarc.xevent.XBaseEvent
import com.yidian.xarc.xevent.XEventManager import com.yidian.xarc.xevent.XEventManager
import com.yidian.xpage.XPageManager
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode import org.greenrobot.eventbus.ThreadMode
import timber.log.Timber
/** /**
* 确认订单 * 确认订单
*/ */
class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ConfirmOrderViewModel>() { class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ConfirmOrderViewModel>() {
private var marketingId: String? = null// 活动id
private val adapter by lazy { OrderConfirmCommodityListAdapter() } private val adapter by lazy { OrderConfirmCommodityListAdapter() }
override val layoutId: Int = R.layout.border_activity_confirm_order override val layoutId: Int = R.layout.border_activity_confirm_order
...@@ -41,6 +46,7 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ...@@ -41,6 +46,7 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding,
val paramsMap = intent?.getSerializableExtra(XRouterPathConstants.ParamsKey) val paramsMap = intent?.getSerializableExtra(XRouterPathConstants.ParamsKey)
if (paramsMap != null) { if (paramsMap != null) {
paramsMap as HashMap<String, String?> paramsMap as HashMap<String, String?>
marketingId = paramsMap["marketing_id"]
vm.requestConfirmOrderInfo(paramsMap) vm.requestConfirmOrderInfo(paramsMap)
} }
} }
...@@ -49,6 +55,23 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ...@@ -49,6 +55,23 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding,
vm.goodsSuccessEvent.observe(this, { vm.goodsSuccessEvent.observe(this, {
adapter.setList(it) adapter.setList(it)
}) })
vm.chooseCouponEvent.observe(this) {
// 将最新的优惠券列表传递过去
val hashMap = HashMap<String, Any?>()
hashMap[IntentConstants.KEY_EXTRA_COUPON_LIST] = it
XPageManager.push(XRouterPathConstants.CHOOSE_VOUCHER_ACTIVITY, hashMap)
}
vm.choosePointEvent.observe(this) {
// 将选择的自提点id传递过去
marketingId?.let { id ->
val hashMap = HashMap<String, Any?>()
hashMap[IntentConstants.KEY_EXTRA_PICKUP_POINT_ID] = it
hashMap[IntentConstants.KEY_EXTRA_MARKETING_ID] = id
Timber.e("活动id: $id")
XPageManager.push(XRouterPathConstants.PICKUP_POINT_ACTIVITY, hashMap)
}
}
} }
...@@ -62,13 +85,13 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ...@@ -62,13 +85,13 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding,
when (event?.name) { when (event?.name) {
XEventConfig.CONFIRM_ORDER_CHOOSE_POINT_SUCCESS -> { XEventConfig.CONFIRM_ORDER_CHOOSE_POINT_SUCCESS -> {
// 选择自提点成功 // 选择自提点成功
val point = event.body as Shipping val point = event.body as PickupPoint
vm.choosePickUpPointSuccess(point) vm.choosePickUpPointSuccess(point)
} }
XEventConfig.CONFIRM_ORDER_CHOOSE_COUPON_SUCCESS -> { XEventConfig.CONFIRM_ORDER_CHOOSE_COUPON_SUCCESS -> {
// 选择优惠券成功 // 选择优惠券成功
val coupon = event.body as CouponDto val selectedCouponIndex = event.body as Int
vm.chooseVoucherSuccess(coupon) vm.chooseVoucherSuccess(selectedCouponIndex)
} }
} }
} }
......
...@@ -6,9 +6,11 @@ import com.yidian.bcommon.mvvm.BaseViewModel ...@@ -6,9 +6,11 @@ import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.bcommon.utils.ToastUtils import com.yidian.bcommon.utils.ToastUtils
import com.yidian.shenghuoquan.border.dto.CouponDto import com.yidian.shenghuoquan.border.dto.CouponDto
import com.yidian.shenghuoquan.border.dto.GoodsDto import com.yidian.shenghuoquan.border.dto.GoodsDto
import com.yidian.shenghuoquan.border.dto.PickupPoint
import com.yidian.shenghuoquan.border.dto.Shipping import com.yidian.shenghuoquan.border.dto.Shipping
import com.yidian.shenghuoquan.border.http.OrderRemoteDataSource import com.yidian.shenghuoquan.border.http.OrderRemoteDataSource
class ConfirmOrderViewModel : BaseViewModel() { class ConfirmOrderViewModel : BaseViewModel() {
private var originalAmount: Double = 0.00// 原价总和 private var originalAmount: Double = 0.00// 原价总和
...@@ -17,8 +19,8 @@ class ConfirmOrderViewModel : BaseViewModel() { ...@@ -17,8 +19,8 @@ class ConfirmOrderViewModel : BaseViewModel() {
var selectedPickUpPoint = MutableLiveData<Shipping?>()// 自提点 var selectedPickUpPoint = MutableLiveData<Shipping?>()// 自提点
var receivingName = MutableLiveData<String>()// 收货人姓名 var receivingName = MutableLiveData<String>()// 收货人姓名
var receivingPhone = MutableLiveData<String>()//收货人电话 var receivingPhone = MutableLiveData<String>()//收货人电话
var selectedCoupon = MutableLiveData<CouponDto>()// 选中的优惠券 var selectedCoupon = MutableLiveData<CouponDto?>()// 选中的优惠券
var couponsAvailableNum = MutableLiveData<Int>()// 可用优惠券数量 var couponsAvailableList = MutableLiveData<List<CouponDto>?>()// 可用优惠券列表
var totalAmount = MutableLiveData(0.00)// 合计金额 = 原价 - 优惠 var totalAmount = MutableLiveData(0.00)// 合计金额 = 原价 - 优惠
var remark = MutableLiveData<String>() var remark = MutableLiveData<String>()
...@@ -28,6 +30,18 @@ class ConfirmOrderViewModel : BaseViewModel() { ...@@ -28,6 +30,18 @@ class ConfirmOrderViewModel : BaseViewModel() {
private val _goodsSuccessEvent = MutableLiveData<List<GoodsDto>?>() private val _goodsSuccessEvent = MutableLiveData<List<GoodsDto>?>()
val goodsSuccessEvent: LiveData<List<GoodsDto>?> = _goodsSuccessEvent val goodsSuccessEvent: LiveData<List<GoodsDto>?> = _goodsSuccessEvent
/**
* 选择自提点 Event
*/
private val _choosePointEvent = MutableLiveData<Long?>()
val choosePointEvent: LiveData<Long?> = _choosePointEvent
/**
* 选择优惠券 Event
*/
private val _chooseCouponEvent = MutableLiveData<List<CouponDto>?>()
val chooseCouponEvent: LiveData<List<CouponDto>?> = _chooseCouponEvent
/** /**
* 请求订单信息 * 请求订单信息
*/ */
...@@ -39,10 +53,9 @@ class ConfirmOrderViewModel : BaseViewModel() { ...@@ -39,10 +53,9 @@ class ConfirmOrderViewModel : BaseViewModel() {
selectedPickUpPoint.value = it.shipping selectedPickUpPoint.value = it.shipping
receivingName.value = it.shipping?.receiverName ?: "" receivingName.value = it.shipping?.receiverName ?: ""
receivingPhone.value = it.shipping?.receiverMobile ?: "" receivingPhone.value = it.shipping?.receiverMobile ?: ""
_goodsSuccessEvent.value = it.goodsDto _goodsSuccessEvent.value = it.goodsList
calculateOriginalAmount(it.goodsDto) calculateOriginalAmount(it.goodsList)
couponsAvailableNum.value = it.couponDto?.size ?: 0 // 显示0张便于查看不能使用的优惠券 couponsAvailableList.value = it.couponList
} }
} }
...@@ -67,30 +80,38 @@ class ConfirmOrderViewModel : BaseViewModel() { ...@@ -67,30 +80,38 @@ class ConfirmOrderViewModel : BaseViewModel() {
totalAmount.value = originalAmount - couponAmount totalAmount.value = originalAmount - couponAmount
} }
/** /**
* 选择自提点 * 选择自提点,如果有上次选中的带过去自提点id
*/ */
fun choosePickUpPoint() { fun choosePickUpPoint() {
// todo 带过去当前选中自提点 // 带过去当前选中自提点id
ToastUtils.showLongSafe("去选择自提点") _choosePointEvent.value = selectedPickUpPoint.value?.takePlaceId
} }
fun choosePickUpPointSuccess(point: Shipping) { fun choosePickUpPointSuccess(point: PickupPoint) {
selectedPickUpPoint.value = point selectedPickUpPoint.value = Shipping(
takePlaceId = point.takePlaceId,
takePlaceName = point.takePlaceName,
contactName = point.contactName,
phone = point.phone,
address = point.address
)
} }
/** /**
* 选择代金券 * 选择代金券, 如果有上次选中的带过去最新的列表
*/ */
fun chooseVoucher() { fun chooseVoucher() {
// todo 带过去当前选中优惠券 _chooseCouponEvent.value = couponsAvailableList.value
ToastUtils.showLongSafe("去选择优惠券")
} }
fun chooseVoucherSuccess(coupon: CouponDto) { fun chooseVoucherSuccess(selectedIndex: Int) {
// 获取选中的优惠券
val coupon = couponsAvailableList.value?.get(selectedIndex)
//将该优惠券更新为选中状态
coupon?.selected = true
selectedCoupon.value = coupon selectedCoupon.value = coupon
couponAmount = coupon.amount?.toDouble() ?: 0.00 couponAmount = coupon?.amount?.toDouble() ?: 0.00
// 重新计算相关金额 // 重新计算相关金额
calculateTotalAmount() calculateTotalAmount()
} }
......
...@@ -111,7 +111,7 @@ ...@@ -111,7 +111,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp8" android:layout_marginTop="@dimen/dp8"
android:text="@{vm.selectedPickUpPoint.takePlaceName}" android:text="@{vm.selectedPickUpPoint.address}"
android:textColor="@color/color_999999" android:textColor="@color/color_999999"
android:textSize="@dimen/sp14" android:textSize="@dimen/sp14"
app:isShow="@{vm.selectedPickUpPoint.takePlaceName != null}" app:isShow="@{vm.selectedPickUpPoint.takePlaceName != null}"
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp8" android:layout_marginTop="@dimen/dp8"
android:text="@{@string/pickup_point_contract_person + vm.selectedPickUpPoint.receiverName + vm.selectedPickUpPoint.receiverMobile}" android:text="@{@string/pickup_point_contract_person + String.valueOf(vm.selectedPickUpPoint.contactName + vm.selectedPickUpPoint.phone)}"
android:textColor="@color/color_999999" android:textColor="@color/color_999999"
android:textSize="@dimen/sp14" android:textSize="@dimen/sp14"
app:isShow="@{vm.selectedPickUpPoint.takePlaceName != null}" app:isShow="@{vm.selectedPickUpPoint.takePlaceName != null}"
...@@ -242,7 +242,7 @@ ...@@ -242,7 +242,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp8" android:layout_marginTop="@dimen/dp8"
android:onClick="@{() -> vm.chooseVoucher()}" android:onClick="@{() -> vm.chooseVoucher()}"
app:isShow="@{vm.couponsAvailableNum > 0}" app:isShow="@{vm.couponsAvailableList.size() > 0}"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rv_goods_list"> app:layout_constraintTop_toBottomOf="@id/rv_goods_list">
...@@ -254,7 +254,7 @@ ...@@ -254,7 +254,7 @@
android:drawableStart="@drawable/icon_red_envelope" android:drawableStart="@drawable/icon_red_envelope"
android:drawablePadding="@dimen/dp5" android:drawablePadding="@dimen/dp5"
android:singleLine="true" android:singleLine="true"
android:text="红包/优惠券" android:text="@{vm.selectedCoupon.name ?? @string/red_packet_or_coupon}"
android:textColor="@color/color_333333" android:textColor="@color/color_333333"
android:textSize="@dimen/sp14" android:textSize="@dimen/sp14"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
...@@ -272,9 +272,10 @@ ...@@ -272,9 +272,10 @@
android:paddingTop="@dimen/dp2" android:paddingTop="@dimen/dp2"
android:paddingEnd="@dimen/dp5" android:paddingEnd="@dimen/dp5"
android:paddingBottom="@dimen/dp2" android:paddingBottom="@dimen/dp2"
android:text="@{vm.couponsAvailableNum + @string/coupons_available_num}" android:text="@{vm.couponsAvailableList.size() + @string/coupons_available_num}"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="11sp" android:textSize="11sp"
app:isShow="@{vm.selectedCoupon.amount == null}"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_coupons_next_arrow" app:layout_constraintEnd_toStartOf="@id/iv_coupons_next_arrow"
app:layout_constraintHorizontal_bias="1" app:layout_constraintHorizontal_bias="1"
...@@ -282,6 +283,25 @@ ...@@ -282,6 +283,25 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:text="3张优惠券可用" /> tools:text="3张优惠券可用" />
<TextView
android:id="@+id/tv_coupons_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dp5"
android:paddingTop="@dimen/dp2"
android:paddingEnd="@dimen/dp5"
android:paddingBottom="@dimen/dp2"
android:text="@{vm.selectedCoupon.amount}"
android:textColor="@color/color_FD7823"
android:textSize="11sp"
app:isShow="@{vm.selectedCoupon.amount != null}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_coupons_next_arrow"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="- ¥10.00" />
<ImageView <ImageView
android:id="@+id/iv_coupons_next_arrow" android:id="@+id/iv_coupons_next_arrow"
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment