订单明细 最终单价

This commit is contained in:
wangw 2025-03-01 16:23:41 +08:00
parent 94dc13f5f2
commit a9900821bb
7 changed files with 80 additions and 53 deletions

View File

@ -48,9 +48,21 @@ public class OrderDetailDTO implements Serializable {
private String skuName; private String skuName;
/** /**
* 单价原价/会员价/临时改价 * 原价
*/ */
private BigDecimal price; private BigDecimal price;
/**
* 会员价
*/
private BigDecimal memberPrice;
/**
* 临时改价/临时菜价
*/
private BigDecimal discountSaleAmount;
/**
* 最终单价
*/
private BigDecimal unitPrice;
/** /**
* 折扣金额 * 折扣金额

View File

@ -28,6 +28,8 @@ public class CheckOrderPay implements Serializable {
private Long userId; private Long userId;
private Integer vipPrice;
/** /**
* 用餐人数 * 用餐人数
*/ */
@ -115,4 +117,7 @@ public class CheckOrderPay implements Serializable {
} }
public boolean isVipPrice() {
return vipPrice != null && vipPrice == 1;
}
} }

View File

@ -5,18 +5,16 @@ import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table; import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/** /**
* 订单详情 实体类 * 订单详情 实体类
* *
@ -56,9 +54,21 @@ public class OrderDetail implements Serializable {
private String skuName; private String skuName;
/** /**
* 单价原价/会员价/临时改价 * 原价
*/ */
private BigDecimal price; private BigDecimal price;
/**
* 会员价
*/
private BigDecimal memberPrice;
/**
* 临时改价/临时菜价
*/
private BigDecimal discountSaleAmount;
/**
* 最终单价
*/
private BigDecimal unitPrice;
/** /**
* 折扣金额(商品优惠券抵扣金额) * 折扣金额(商品优惠券抵扣金额)

View File

@ -32,7 +32,7 @@ public class OrderDetailSmallVO implements Serializable {
private BigDecimal packNum; private BigDecimal packNum;
private BigDecimal returnNum; private BigDecimal returnNum;
private BigDecimal refundNum; private BigDecimal refundNum;
private BigDecimal price; private BigDecimal unitPrice;
private BigDecimal payAmount; private BigDecimal payAmount;
private String remark; private String remark;

View File

@ -270,7 +270,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
BigDecimalDTO prodCouponAmount = new BigDecimalDTO(BigDecimal.ZERO); BigDecimalDTO prodCouponAmount = new BigDecimalDTO(BigDecimal.ZERO);
//总商品支付金额 不包含打包费 用来计算后续 //总商品支付金额 不包含打包费 用来计算后续
BigDecimalDTO totalAmount = new BigDecimalDTO(BigDecimal.ZERO); BigDecimalDTO totalAmount = new BigDecimalDTO(BigDecimal.ZERO);
processOrderDetails2(orderDetails, prodCouponMap, prodCouponAmount, totalAmount); processOrderDetails2(orderDetails, prodCouponMap, prodCouponAmount, totalAmount, param.isVipPrice());
//总商品支付金额 不包含打包费 用来计算后续 //总商品支付金额 不包含打包费 用来计算后续
log.info("支付前置,商品金额{} 商品优惠券金额{} 总金额{}", totalAmount, prodCouponAmount, totalAmount.getPrice().add(orderInfo.getPackFee())); log.info("支付前置,商品金额{} 商品优惠券金额{} 总金额{}", totalAmount, prodCouponAmount, totalAmount.getPrice().add(orderInfo.getPackFee()));
if (prodCouponAmount.getPrice().compareTo(param.getProductCouponDiscountAmount()) != 0) { if (prodCouponAmount.getPrice().compareTo(param.getProductCouponDiscountAmount()) != 0) {
@ -355,7 +355,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
* @param totalAmount 最终总金额没加打包费 餐位费 去除优惠券金额后的 * @param totalAmount 最终总金额没加打包费 餐位费 去除优惠券金额后的
*/ */
private void processOrderDetails2(List<OrderDetail> orderDetails, Map<Long, Integer> prodCouponMap, private void processOrderDetails2(List<OrderDetail> orderDetails, Map<Long, Integer> prodCouponMap,
BigDecimalDTO prodCouponAmount, BigDecimalDTO totalAmount) { BigDecimalDTO prodCouponAmount, BigDecimalDTO totalAmount, boolean isVipPrice) {
Map<Long, List<OrderDetail>> detailMap = new HashMap<>(); Map<Long, List<OrderDetail>> detailMap = new HashMap<>();
for (OrderDetail detail : orderDetails) { for (OrderDetail detail : orderDetails) {
detailMap.computeIfAbsent(detail.getProductId(), k -> new ArrayList<>()).add(detail); detailMap.computeIfAbsent(detail.getProductId(), k -> new ArrayList<>()).add(detail);
@ -372,6 +372,15 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
} }
} }
for (OrderDetail orderDetail : value) { for (OrderDetail orderDetail : value) {
if (orderDetail.getDiscountSaleAmount() != null && orderDetail.getDiscountSaleAmount().compareTo(BigDecimal.ZERO) > 0) {
orderDetail.setUnitPrice(orderDetail.getDiscountSaleAmount());
}else {
if (isVipPrice) {
orderDetail.setUnitPrice(orderDetail.getMemberPrice());
}else {
orderDetail.setUnitPrice(orderDetail.getPrice());
}
}
if (couponNum.compareTo(BigDecimal.ZERO) > 0) { if (couponNum.compareTo(BigDecimal.ZERO) > 0) {
if (couponNum.compareTo(orderDetail.getNum()) >= 0) { if (couponNum.compareTo(orderDetail.getNum()) >= 0) {
orderDetail.setCouponNum(orderDetail.getNum()); orderDetail.setCouponNum(orderDetail.getNum());
@ -379,15 +388,15 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
couponNum = couponNum.subtract(orderDetail.getNum()); couponNum = couponNum.subtract(orderDetail.getNum());
} else { } else {
orderDetail.setCouponNum(couponNum); orderDetail.setCouponNum(couponNum);
orderDetail.setPayAmount((orderDetail.getNum().subtract(couponNum)).multiply(orderDetail.getPrice())); orderDetail.setPayAmount((orderDetail.getNum().subtract(couponNum)).multiply(orderDetail.getUnitPrice()));
couponNum = BigDecimal.ZERO; couponNum = BigDecimal.ZERO;
} }
prodCouponAmount.setPrice(prodCouponAmount.getPrice().add(orderDetail.getPrice().multiply(orderDetail.getCouponNum()))); prodCouponAmount.setPrice(prodCouponAmount.getPrice().add(orderDetail.getUnitPrice().multiply(orderDetail.getCouponNum())));
} else { } else {
orderDetail.setCouponNum(BigDecimal.ZERO); orderDetail.setCouponNum(BigDecimal.ZERO);
orderDetail.setPayAmount(orderDetail.getNum().multiply(orderDetail.getPrice())); orderDetail.setPayAmount(orderDetail.getNum().multiply(orderDetail.getUnitPrice()));
} }
totalAmount.setPrice(totalAmount.getPrice().add(orderDetail.getPayAmount())); totalAmount.setPrice(totalAmount.getPrice().add(orderDetail.getUnitPrice()));
resultList.add(orderDetail); resultList.add(orderDetail);
} }
if (couponNum.compareTo(BigDecimal.ZERO) != 0) { if (couponNum.compareTo(BigDecimal.ZERO) != 0) {

View File

@ -454,10 +454,10 @@ public class PayServiceImpl implements PayService {
refNum = returnNum.subtract(orderDetail.getCouponNum()); refNum = returnNum.subtract(orderDetail.getCouponNum());
//退单数量 大于 实际计算金额的数量 //退单数量 大于 实际计算金额的数量
if (refundDetail.getNum().compareTo(refNum) > 0) { if (refundDetail.getNum().compareTo(refNum) > 0) {
refundAmount = refNum.multiply(orderDetail.getPrice()); refundAmount = refNum.multiply(orderDetail.getUnitPrice());
returnCouponMap.put(orderDetail.getProductId(), refundDetail.getNum().subtract(refNum).intValue()); returnCouponMap.put(orderDetail.getProductId(), refundDetail.getNum().subtract(refNum).intValue());
} else { } else {
refundAmount = refundDetail.getNum().multiply(orderDetail.getPrice()); refundAmount = refundDetail.getNum().multiply(orderDetail.getUnitPrice());
} }
} }
if (refundAmount.compareTo(refundDetail.getReturnAmount()) != 0) { if (refundAmount.compareTo(refundDetail.getReturnAmount()) != 0) {
@ -474,7 +474,7 @@ public class PayServiceImpl implements PayService {
} else { } else {
orderDetail.setReturnNum(orderDetail.getRefundNum().add(refNum)); orderDetail.setReturnNum(orderDetail.getRefundNum().add(refNum));
orderDetail.setPayAmount((orderDetail.getNum().subtract(orderDetail.getRefundNum()).subtract(orderDetail.getReturnNum()) orderDetail.setPayAmount((orderDetail.getNum().subtract(orderDetail.getRefundNum()).subtract(orderDetail.getReturnNum())
.subtract(orderDetail.getCouponNum())).multiply(orderDetail.getPrice())); .subtract(orderDetail.getCouponNum())).multiply(orderDetail.getUnitPrice()));
} }
orderDetail.setRefundNo(refPayOrderNo); orderDetail.setRefundNo(refPayOrderNo);
orderDetail.setRefundRemark(orderDetail.getRefundRemark() + param.getRefundReason()); orderDetail.setRefundRemark(orderDetail.getRefundRemark() + param.getRefundReason());

View File

@ -5,43 +5,34 @@
<mapper namespace="com.czg.service.order.mapper.CashierCartMapper"> <mapper namespace="com.czg.service.order.mapper.CashierCartMapper">
<select id="getCartByTableCode" resultType="com.czg.order.entity.OrderDetail"> <select id="getCartByTableCode" resultType="com.czg.order.entity.OrderDetail">
select cart.shop_id as shopId, select cart.shop_id as shopId,
cart.number as num, cart.number as num,
pros.pack_fee as packAmount, pros.pack_fee as packAmount,
cart.pack_number as packNumber, cart.pack_number as packNumber,
cart.is_temporary as isTemporary, cart.is_temporary as isTemporary,
cart.discount_sale_note as discountSaleNote, cart.discount_sale_note as discountSaleNote,
cart.is_print as isPrint, cart.is_print as isPrint,
cart.is_wait_call as isWaitCall, cart.is_wait_call as isWaitCall,
cart.pro_group_info as proGroupInfo, cart.pro_group_info as proGroupInfo,
cart.remark as remark, cart.remark as remark,
cart.product_id as productId, cart.product_id as productId,
pros.cover_img as productImg, pros.cover_img as productImg,
pros.type as productType, pros.type as productType,
cart.sku_id as skuId, cart.sku_id as skuId,
skus.spec_info as skuName, skus.spec_info as skuName,
'wait-pay' as status, cart.discount_sale_amount as discountSaleAmount,
#{placeNum} as placeNum, case cart.is_gift
when 1 then 0
else skus.sale_price end as price,
case cart.is_gift
when 1 then 0
else skus.member_price end as memberPrice,
'wait-pay' as status,
#{placeNum} as placeNum,
case cart.is_temporary case cart.is_temporary
when 1 then cart.product_name when 1 then cart.product_name
else pros.name else pros.name
end as productName, end as productName
case cart.is_gift
when 1 then 0
else
CASE
cart.is_temporary
WHEN 1 THEN
cart.discount_sale_amount
ELSE
IF(cart.discount_sale_amount > 0,
cart.discount_sale_amount,
CASE #{isUseVip}
WHEN 1 THEN skus.member_price
ELSE skus.sale_price END)
end
END as price
from tb_cashier_cart cart from tb_cashier_cart cart
left join tb_product pros on cart.product_id = pros.id left join tb_product pros on cart.product_id = pros.id
left join tb_prod_sku skus on cart.sku_id = skus.id left join tb_prod_sku skus on cart.sku_id = skus.id