|
@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.yonge.cooleshow.api.feign.AdminFeignService;
|
|
|
+import com.yonge.cooleshow.api.feign.dto.CouponInfoApi;
|
|
|
import com.yonge.cooleshow.common.entity.HttpResponseResult;
|
|
|
import com.yonge.cooleshow.common.entity.MallOrderItemDto;
|
|
|
import com.yonge.cooleshow.common.enums.PostStatusEnum;
|
|
@@ -148,6 +149,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> generateOrder(OrderParam orderParam) {
|
|
|
+ if (orderParam.getOrderAmount() == null) {
|
|
|
+ throw new BizException("订单金额校验不通过");
|
|
|
+ }
|
|
|
List<OmsOrderItem> orderItemList = new ArrayList<>();
|
|
|
//获取购物车及优惠信息
|
|
|
UmsMember currentMember = memberService.getCurrentMember();
|
|
@@ -179,19 +183,27 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
Asserts.fail("库存不足,无法下单");
|
|
|
}
|
|
|
//判断使用使用了优惠券
|
|
|
- if (orderParam.getCouponId() == null) {
|
|
|
+ if (StringUtil.isEmpty(orderParam.getCouponId())) {
|
|
|
//不用优惠券
|
|
|
for (OmsOrderItem orderItem : orderItemList) {
|
|
|
orderItem.setCouponAmount(new BigDecimal(0));
|
|
|
}
|
|
|
} else {
|
|
|
- //使用优惠券
|
|
|
- SmsCouponHistoryDetail couponHistoryDetail = getUseCoupon(cartPromotionItemList, orderParam.getCouponId());
|
|
|
- if (couponHistoryDetail == null) {
|
|
|
- Asserts.fail("该优惠券不可用");
|
|
|
- }
|
|
|
+ // todo 使用优惠券 远程调用获取优惠券金额
|
|
|
+ // SmsCouponHistoryDetail couponHistoryDetail = getUseCoupon(cartPromotionItemList, orderParam.getCouponId());
|
|
|
+ // if (couponHistoryDetail == null) {
|
|
|
+ // Asserts.fail("该优惠券不可用");
|
|
|
+ // }
|
|
|
//对下单商品的优惠券进行处理
|
|
|
- handleCouponAmount(orderItemList, couponHistoryDetail);
|
|
|
+ HttpResponseResult<CouponInfoApi> couponInfoApiHttpResponseResult = adminFeignService.queryCouponOrderPageInfo(
|
|
|
+ currentMember.getId(), orderParam.getCouponId(), orderParam.getOrderAmount(),
|
|
|
+ orderParam.getPlatformType());
|
|
|
+ CouponInfoApi data = couponInfoApiHttpResponseResult.getData();
|
|
|
+ BigDecimal couponAmount = BigDecimal.ZERO;
|
|
|
+ if(data != null) {
|
|
|
+ couponAmount = data.getDiscountedPrices();
|
|
|
+ }
|
|
|
+ handleCouponAmount(orderItemList, couponAmount);
|
|
|
}
|
|
|
//判断是否使用积分
|
|
|
if (orderParam.getUseIntegration() == null || orderParam.getUseIntegration().equals(0)) {
|
|
@@ -234,7 +246,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
order.setPromotionAmount(calcPromotionAmount(orderItemList));
|
|
|
order.setPromotionInfo(getOrderPromotionInfo(orderItemList));
|
|
|
order.setPlatformType(orderParam.getPlatformType());
|
|
|
- if (orderParam.getCouponId() == null) {
|
|
|
+ if (StringUtil.isEmpty(orderParam.getCouponId())) {
|
|
|
order.setCouponAmount(new BigDecimal(0));
|
|
|
} else {
|
|
|
order.setCouponId(orderParam.getCouponId());
|
|
@@ -247,7 +259,11 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
order.setIntegration(orderParam.getUseIntegration());
|
|
|
order.setIntegrationAmount(calcIntegrationAmount(orderItemList));
|
|
|
}
|
|
|
- order.setPayAmount(calcPayAmount(order));
|
|
|
+ BigDecimal payAmount = calcPayAmount(order);
|
|
|
+ if (payAmount.compareTo(orderParam.getOrderAmount()) != 0) {
|
|
|
+ throw new BizException("订单金额校验不通过");
|
|
|
+ }
|
|
|
+ order.setPayAmount(payAmount);
|
|
|
//转化为订单信息并插入数据库
|
|
|
order.setMemberId(currentMember.getId());
|
|
|
order.setCreateTime(new Date());
|
|
@@ -292,7 +308,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
orderItemDao.insertList(orderItemList);
|
|
|
//如使用优惠券更新优惠券使用状态
|
|
|
if (orderParam.getCouponId() != null) {
|
|
|
- updateCouponStatus(orderParam.getCouponId(), currentMember.getId(), 1);
|
|
|
+ // updateCouponStatus(orderParam.getCouponId(), currentMember.getId(), 1);
|
|
|
+ // todo 远程调用更新优惠券使用
|
|
|
+ adminFeignService.updateCouponOrderInfo(orderParam.getCouponId(),false,order.getOrderSn());
|
|
|
}
|
|
|
//如使用积分需要扣除积分
|
|
|
if (orderParam.getUseIntegration() != null) {
|
|
@@ -474,7 +492,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
portalOrderDao.releaseProductStockLock(orderItemList);
|
|
|
}
|
|
|
//修改优惠券使用状态
|
|
|
- updateCouponStatus(cancelOrder.getCouponId(), cancelOrder.getMemberId(), 0);
|
|
|
+ // updateCouponStatus(cancelOrder.getCouponId(), cancelOrder.getMemberId(), 0);
|
|
|
+ // todo 退回优惠券
|
|
|
+
|
|
|
+ adminFeignService.updateCouponOrderInfo(cancelOrder.getCouponId(),true,cancelOrder.getOrderSn());
|
|
|
//返还使用积分
|
|
|
if (cancelOrder.getUseIntegration() != null) {
|
|
|
UmsMember member = memberService.getById(cancelOrder.getMemberId());
|
|
@@ -1259,22 +1280,22 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
* @param orderItemList order_item列表
|
|
|
* @param couponHistoryDetail 可用优惠券详情
|
|
|
*/
|
|
|
- private void handleCouponAmount(List<OmsOrderItem> orderItemList, SmsCouponHistoryDetail couponHistoryDetail) {
|
|
|
- SmsCoupon coupon = couponHistoryDetail.getCoupon();
|
|
|
- if (coupon.getUseType().equals(0)) {
|
|
|
+ private void handleCouponAmount(List<OmsOrderItem> orderItemList, BigDecimal couponAmount) {
|
|
|
+ // SmsCoupon coupon = couponHistoryDetail.getCoupon();
|
|
|
+ // if (coupon.getUseType().equals(0)) {
|
|
|
//全场通用
|
|
|
- calcPerCouponAmount(orderItemList, coupon);
|
|
|
- } else if (coupon.getUseType().equals(1)) {
|
|
|
- //指定分类
|
|
|
- List<OmsOrderItem> couponOrderItemList = getCouponOrderItemByRelation(couponHistoryDetail, orderItemList,
|
|
|
- 0);
|
|
|
- calcPerCouponAmount(couponOrderItemList, coupon);
|
|
|
- } else if (coupon.getUseType().equals(2)) {
|
|
|
- //指定商品
|
|
|
- List<OmsOrderItem> couponOrderItemList = getCouponOrderItemByRelation(couponHistoryDetail, orderItemList,
|
|
|
- 1);
|
|
|
- calcPerCouponAmount(couponOrderItemList, coupon);
|
|
|
- }
|
|
|
+ calcPerCouponAmount(orderItemList, couponAmount);
|
|
|
+ // } else if (coupon.getUseType().equals(1)) {
|
|
|
+ // //指定分类
|
|
|
+ // List<OmsOrderItem> couponOrderItemList = getCouponOrderItemByRelation(couponHistoryDetail, orderItemList,
|
|
|
+ // 0);
|
|
|
+ // calcPerCouponAmount(couponOrderItemList, coupon);
|
|
|
+ // } else if (coupon.getUseType().equals(2)) {
|
|
|
+ // //指定商品
|
|
|
+ // List<OmsOrderItem> couponOrderItemList = getCouponOrderItemByRelation(couponHistoryDetail, orderItemList,
|
|
|
+ // 1);
|
|
|
+ // calcPerCouponAmount(couponOrderItemList, coupon);
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1282,13 +1303,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|
|
*
|
|
|
* @param orderItemList 可用优惠券的下单商品商品
|
|
|
*/
|
|
|
- private void calcPerCouponAmount(List<OmsOrderItem> orderItemList, SmsCoupon coupon) {
|
|
|
+ private void calcPerCouponAmount(List<OmsOrderItem> orderItemList, BigDecimal coupon) {
|
|
|
BigDecimal totalAmount = calcTotalAmount(orderItemList);
|
|
|
for (OmsOrderItem orderItem : orderItemList) {
|
|
|
//(商品价格/可用商品总价)*优惠券面额
|
|
|
BigDecimal couponAmount = orderItem.getProductPrice()
|
|
|
.divide(totalAmount, 3, RoundingMode.HALF_EVEN)
|
|
|
- .multiply(coupon.getAmount());
|
|
|
+ .multiply(coupon);
|
|
|
orderItem.setCouponAmount(couponAmount);
|
|
|
}
|
|
|
}
|