|
@@ -13,7 +13,9 @@ import com.ylx.common.constant.MassageConstants;
|
|
import com.ylx.common.core.domain.R;
|
|
import com.ylx.common.core.domain.R;
|
|
import com.ylx.common.exception.ServiceException;
|
|
import com.ylx.common.exception.ServiceException;
|
|
import com.ylx.massage.domain.*;
|
|
import com.ylx.massage.domain.*;
|
|
|
|
+import com.ylx.massage.domain.vo.CouponReceiveVo;
|
|
import com.ylx.massage.enums.BillTypeEnum;
|
|
import com.ylx.massage.enums.BillTypeEnum;
|
|
|
|
+import com.ylx.massage.enums.DiscountTypeEnum;
|
|
import com.ylx.massage.enums.JsStatusEnum;
|
|
import com.ylx.massage.enums.JsStatusEnum;
|
|
import com.ylx.massage.enums.OrderStatusEnum;
|
|
import com.ylx.massage.enums.OrderStatusEnum;
|
|
import com.ylx.massage.mapper.TOrderMapper;
|
|
import com.ylx.massage.mapper.TOrderMapper;
|
|
@@ -30,6 +32,7 @@ import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -101,6 +104,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
* @param order
|
|
* @param order
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
public TOrder addOrder(TOrder order) {
|
|
public TOrder addOrder(TOrder order) {
|
|
|
|
|
|
if (StringUtils.isBlank(order.getcJsId())) {
|
|
if (StringUtils.isBlank(order.getcJsId())) {
|
|
@@ -118,14 +122,16 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//优惠卷减免
|
|
//优惠卷减免
|
|
- couponReceiveService.getByOpenId(order.getcOpenId());
|
|
|
|
|
|
+ List<CouponReceiveVo> coupons = couponReceiveService.getByOpenId(order.getcOpenId());
|
|
|
|
+ BigDecimal preferential = this.setCoupon(coupons);
|
|
|
|
+ order.setPreferential(preferential);
|
|
|
|
|
|
//订单价格
|
|
//订单价格
|
|
List<TXiangmu> list = JSONObject.parseArray(order.getcGoods().toJSONString(), TXiangmu.class);
|
|
List<TXiangmu> list = JSONObject.parseArray(order.getcGoods().toJSONString(), TXiangmu.class);
|
|
BigDecimal sum = list.stream().map(TXiangmu::getSum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal sum = list.stream().map(TXiangmu::getSum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
order.setdTotalMoney(sum);
|
|
order.setdTotalMoney(sum);
|
|
- //总价
|
|
|
|
- order.setTotalPrice(sum.add(Optional.ofNullable(order.getFare()).orElse(BigDecimal.ZERO)));
|
|
|
|
|
|
+ //总价 = 订单 + 车费 - 优惠
|
|
|
|
+ order.setTotalPrice(sum.add(Optional.ofNullable(order.getFare()).orElse(BigDecimal.ZERO)).subtract(preferential));
|
|
if (order.getOrderType() == 2) {
|
|
if (order.getOrderType() == 2) {
|
|
//升级订单 补差价
|
|
//升级订单 补差价
|
|
TOrder partOrder = this.getByNo(order.getParentNo());
|
|
TOrder partOrder = this.getByNo(order.getParentNo());
|
|
@@ -145,9 +151,20 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
order.setOrderNo(generator.generateNextOrderNumber(OrderNumberGenerator.KEY_PREFIX_ORDER));
|
|
order.setOrderNo(generator.generateNextOrderNumber(OrderNumberGenerator.KEY_PREFIX_ORDER));
|
|
order.setnStatus(OrderStatusEnum.WAIT_PAY.getCode());
|
|
order.setnStatus(OrderStatusEnum.WAIT_PAY.getCode());
|
|
order.setDtCreateTime(LocalDateTime.now());
|
|
order.setDtCreateTime(LocalDateTime.now());
|
|
|
|
+
|
|
save(order);
|
|
save(order);
|
|
return order;
|
|
return order;
|
|
}
|
|
}
|
|
|
|
+ private BigDecimal setCoupon(List<CouponReceiveVo> coupons) {
|
|
|
|
+ //过滤过期的优惠券
|
|
|
|
+ coupons = coupons.stream().filter(coupon -> coupon.getExpirationTime().after(new Date())).collect(Collectors.toList());
|
|
|
|
+ //无门槛优惠券
|
|
|
|
+ List<CouponReceiveVo> collect = coupons.stream().filter(coupon -> coupon.getDiscountType().equals(DiscountTypeEnum.NO_THRESHOLD.getCode())).collect(Collectors.toList());
|
|
|
|
+ //删除优惠卷
|
|
|
|
+ couponReceiveService.removeCoupons(collect);
|
|
|
|
+ //计算优惠金额
|
|
|
|
+ return collect.stream().map(CouponReceiveVo::getDiscountValue).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|