|
|
@@ -2786,15 +2786,23 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
shipTradeOrderCreateReqVO.setIsRead(0);
|
|
|
// 订单金额
|
|
|
TradeOrderTotalVO summary = createVO.getSummary();
|
|
|
- BigDecimal realAmount = summary.getRealMoney()==null?BigDecimal.ZERO:summary.getRealMoney() ;
|
|
|
- BigDecimal freeAmount = tradeOrderDO.getFreeAmount()==null?BigDecimal.ZERO:tradeOrderDO.getFreeAmount();
|
|
|
- BigDecimal orderMoney = summary.getOrderMoney();
|
|
|
- realAmount = realAmount.subtract(freeAmount);
|
|
|
+ BigDecimal orderMoney = ObjectUtil.defaultIfNull(summary.getOrderMoney(), BigDecimal.ZERO);
|
|
|
+ BigDecimal policyAmount = policyList == null
|
|
|
+ ? ObjectUtil.defaultIfNull(tradeOrderDO.getFreeAmount(), BigDecimal.ZERO)
|
|
|
+ : policyList.stream()
|
|
|
+ .map(TradeOrderPolicyReqVO::getAmount)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal effectivePolicyAmount = policyAmount.max(BigDecimal.ZERO)
|
|
|
+ .min(orderMoney.max(BigDecimal.ZERO));
|
|
|
+ BigDecimal realAmount = orderMoney.subtract(effectivePolicyAmount);
|
|
|
Long discountId = summary.getDiscountId();
|
|
|
shipTradeOrderCreateReqVO.setAmount(orderMoney);
|
|
|
- //减去优惠金额
|
|
|
- shipTradeOrderCreateReqVO.setPayAmount(realAmount);
|
|
|
- shipTradeOrderCreateReqVO.setFreeAmount(freeAmount);
|
|
|
+ BigDecimal oldPayAmount = ObjectUtil.defaultIfNull(tradeOrderDO.getPayAmount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal oldFreeAmount = ObjectUtil.defaultIfNull(tradeOrderDO.getFreeAmount(), BigDecimal.ZERO);
|
|
|
+ // 修改订单时只保存待审核的政策,不提前修改优惠金额和实际金额
|
|
|
+ shipTradeOrderCreateReqVO.setPayAmount(oldPayAmount);
|
|
|
+ shipTradeOrderCreateReqVO.setFreeAmount(oldFreeAmount);
|
|
|
BigDecimal oldOrderDeposi = ObjectUtil.defaultIfNull(tradeOrderDO.getDeposi(), BigDecimal.ZERO);
|
|
|
if (createVO.getSummary().getDeposi() != null
|
|
|
&& shipTradeOrderCreateReqVO.getDeposi().compareTo(oldOrderDeposi) != 0) {
|
|
|
@@ -2803,7 +2811,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
}
|
|
|
|
|
|
shipTradeOrderCreateReqVO.setDiscountId(discountId);
|
|
|
- if (createVO.getSummary().getRealOrderMoney() != null) {
|
|
|
+ if (policyList == null && createVO.getSummary().getRealOrderMoney() != null) {
|
|
|
shipTradeOrderCreateReqVO.setPayAmount(createVO.getSummary().getRealOrderMoney());
|
|
|
}
|
|
|
// 设置订单联系人信息
|
|
|
@@ -2912,6 +2920,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
shipTradeOrderCreateReqVO.setOldtradeOrderTotalDO(oldTradeOrderTotal);
|
|
|
// 构建新的订单汇总信息
|
|
|
TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
|
|
|
+ // 实际金额在最终审核通过后,按订单总金额和最新营销政策统一计算
|
|
|
+ tradeOrderTotalDO.setRealMoney(oldTradeOrderTotal.getRealMoney());
|
|
|
if(tradeOrderTotalDO.getUpFloorTotalMoney()==null){
|
|
|
tradeOrderTotalDO.setUpFloorTotalMoney(BigDecimal.ZERO);
|
|
|
}
|
|
|
@@ -2943,8 +2953,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if(tradeOrderDO.getPayStatus()==1 && tradeOrderDO.getPayAmount().subtract(shipTradeOrderCreateReqVO.getPayAmount()).compareTo(BigDecimal.ZERO)!=0){
|
|
|
- return CommonResult.error(500, "已支付订单金额发生变化"+tradeOrderDO.getPayAmount()+"->"+shipTradeOrderCreateReqVO.getPayAmount());
|
|
|
+ if(tradeOrderDO.getPayStatus()==1 && tradeOrderDO.getPayAmount().subtract(realAmount).compareTo(BigDecimal.ZERO)!=0){
|
|
|
+ return CommonResult.error(500, "已支付订单金额发生变化"+tradeOrderDO.getPayAmount()+"->"+realAmount);
|
|
|
}
|
|
|
|
|
|
String changedFields1 = com.yc.ship.module.trade.utils.BeanUtils.getChangedFields(oldTradeOrderTotal, tradeOrderTotalDO);
|
|
|
@@ -3291,10 +3301,6 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
|
|
|
private String updateOrderPolicyAmountOnAudit(TradeOrderDO order) {
|
|
|
List<OrderPolicyDO> policyList = orderPolicyMapper.selectList(OrderPolicyDO::getOrderId, order.getId());
|
|
|
- BigDecimal beforeFreeAmount = ObjectUtil.defaultIfNull(order.getFreeAmount(), BigDecimal.ZERO);
|
|
|
- if (CollUtil.isEmpty(policyList) && beforeFreeAmount.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
- return "";
|
|
|
- }
|
|
|
TradeOrderTotalDO orderTotal = tradeOrderTotalMapper.selectByOrderId(order.getId());
|
|
|
if (orderTotal == null) {
|
|
|
throw exception(ORDER_NOT_EXIST);
|
|
|
@@ -3303,24 +3309,29 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
.map(OrderPolicyDO::getAmount)
|
|
|
.filter(Objects::nonNull)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- return updateOrderPolicyAmount(order.getId(), orderTotal.getRealMoney(), policyAmount);
|
|
|
+ return updateOrderPolicyAmount(order.getId(), orderTotal.getOrderMoney(), policyAmount);
|
|
|
}
|
|
|
|
|
|
- private String updateOrderPolicyAmount(Long orderId, BigDecimal realMoney, BigDecimal policyAmount) {
|
|
|
+ private String updateOrderPolicyAmount(Long orderId, BigDecimal orderMoney, BigDecimal policyAmount) {
|
|
|
TradeOrderDO order = tradeOrderMapper.selectById(orderId);
|
|
|
if (order == null) {
|
|
|
throw exception(ORDER_NOT_EXIST);
|
|
|
}
|
|
|
BigDecimal beforePayAmount = ObjectUtil.defaultIfNull(order.getPayAmount(), BigDecimal.ZERO);
|
|
|
BigDecimal beforeFreeAmount = ObjectUtil.defaultIfNull(order.getFreeAmount(), BigDecimal.ZERO);
|
|
|
- BigDecimal actualRealMoney = ObjectUtil.defaultIfNull(realMoney, BigDecimal.ZERO);
|
|
|
- BigDecimal actualPolicyAmount = ObjectUtil.defaultIfNull(policyAmount, BigDecimal.ZERO);
|
|
|
- BigDecimal afterPayAmount = actualRealMoney.subtract(actualPolicyAmount);
|
|
|
+ BigDecimal actualOrderMoney = ObjectUtil.defaultIfNull(orderMoney, BigDecimal.ZERO).max(BigDecimal.ZERO);
|
|
|
+ BigDecimal actualPolicyAmount = ObjectUtil.defaultIfNull(policyAmount, BigDecimal.ZERO)
|
|
|
+ .max(BigDecimal.ZERO)
|
|
|
+ .min(actualOrderMoney);
|
|
|
+ BigDecimal afterPayAmount = actualOrderMoney.subtract(actualPolicyAmount);
|
|
|
tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
|
|
|
.set(TradeOrderDO::getPayAmount, afterPayAmount)
|
|
|
.set(TradeOrderDO::getFreeAmount, actualPolicyAmount)
|
|
|
.set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
|
|
|
.eq(TradeOrderDO::getId, orderId));
|
|
|
+ tradeOrderTotalMapper.update(Wrappers.<TradeOrderTotalDO>lambdaUpdate()
|
|
|
+ .set(TradeOrderTotalDO::getRealMoney, afterPayAmount)
|
|
|
+ .eq(TradeOrderTotalDO::getOldOrderId, orderId));
|
|
|
|
|
|
StringJoiner amountJoiner = new StringJoiner(",");
|
|
|
if (beforePayAmount.compareTo(afterPayAmount) != 0) {
|