添加部分下单接口
This commit is contained in:
@@ -2,11 +2,13 @@ package com.macro.mall.portal.controller;
|
||||
|
||||
import com.macro.mall.portal.domain.CommonResult;
|
||||
import com.macro.mall.portal.domain.ConfirmOrderResult;
|
||||
import com.macro.mall.portal.domain.OrderParam;
|
||||
import com.macro.mall.portal.service.OmsPortalOrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
@@ -22,10 +24,17 @@ public class OmsPortalOrderController {
|
||||
@Autowired
|
||||
private OmsPortalOrderService portalOrderService;
|
||||
@ApiOperation("根据购物车信息生成确认单信息")
|
||||
@RequestMapping(value = "confirmOrder",method = RequestMethod.POST)
|
||||
@RequestMapping(value = "/generateConfirmOrder",method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public Object confirmOrder(){
|
||||
public Object generateConfirmOrder(){
|
||||
ConfirmOrderResult confirmOrderResult = portalOrderService.generateConfirmOrder();
|
||||
return new CommonResult().success(confirmOrderResult);
|
||||
}
|
||||
|
||||
@ApiOperation("根据购物车信息生成订单")
|
||||
@RequestMapping(value = "/generateOrder",method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public Object generateOrder(@RequestBody OrderParam orderParam){
|
||||
return portalOrderService.generateOrder(orderParam);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,8 @@ public class CartPromotionItem extends OmsCartItem{
|
||||
private String promotionMessage;
|
||||
//促销活动减去的金额,针对每个商品
|
||||
private BigDecimal reduceAmount;
|
||||
|
||||
//商品的真实库存(剩余库存-锁定库存)
|
||||
private Integer realStock;
|
||||
public String getPromotionMessage() {
|
||||
return promotionMessage;
|
||||
}
|
||||
@@ -29,4 +30,12 @@ public class CartPromotionItem extends OmsCartItem{
|
||||
public void setReduceAmount(BigDecimal reduceAmount) {
|
||||
this.reduceAmount = reduceAmount;
|
||||
}
|
||||
|
||||
public Integer getRealStock() {
|
||||
return realStock;
|
||||
}
|
||||
|
||||
public void setRealStock(Integer realStock) {
|
||||
this.realStock = realStock;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.macro.mall.portal.domain;
|
||||
|
||||
/**
|
||||
* 生成订单时传入的参数
|
||||
* Created by macro on 2018/8/30.
|
||||
*/
|
||||
public class OrderParam {
|
||||
//收货地址id
|
||||
private Long memberReceiveAddressId;
|
||||
//优惠券id
|
||||
private Long couponId;
|
||||
//使用的积分数
|
||||
private Integer useIngegration;
|
||||
//支付方式
|
||||
private Integer payType;
|
||||
|
||||
public Long getMemberReceiveAddressId() {
|
||||
return memberReceiveAddressId;
|
||||
}
|
||||
|
||||
public void setMemberReceiveAddressId(Long memberReceiveAddressId) {
|
||||
this.memberReceiveAddressId = memberReceiveAddressId;
|
||||
}
|
||||
|
||||
public Long getCouponId() {
|
||||
return couponId;
|
||||
}
|
||||
|
||||
public void setCouponId(Long couponId) {
|
||||
this.couponId = couponId;
|
||||
}
|
||||
|
||||
public Integer getUseIngegration() {
|
||||
return useIngegration;
|
||||
}
|
||||
|
||||
public void setUseIngegration(Integer useIngegration) {
|
||||
this.useIngegration = useIngegration;
|
||||
}
|
||||
|
||||
public Integer getPayType() {
|
||||
return payType;
|
||||
}
|
||||
|
||||
public void setPayType(Integer payType) {
|
||||
this.payType = payType;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.macro.mall.portal.service;
|
||||
|
||||
import com.macro.mall.portal.domain.CommonResult;
|
||||
import com.macro.mall.portal.domain.ConfirmOrderResult;
|
||||
import com.macro.mall.portal.domain.OrderParam;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* 前台订单管理Service
|
||||
@@ -11,4 +14,10 @@ public interface OmsPortalOrderService {
|
||||
* 根据用户购物车信息生成确认单信息
|
||||
*/
|
||||
ConfirmOrderResult generateConfirmOrder();
|
||||
|
||||
/**
|
||||
* 根据提交信息生成订单
|
||||
*/
|
||||
@Transactional
|
||||
CommonResult generateOrder(OrderParam orderParam);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
package com.macro.mall.portal.service.impl;
|
||||
|
||||
import com.macro.mall.mapper.PmsSkuStockMapper;
|
||||
import com.macro.mall.mapper.UmsIntegrationConsumeSettingMapper;
|
||||
import com.macro.mall.model.UmsIntegrationConsumeSetting;
|
||||
import com.macro.mall.model.UmsMember;
|
||||
import com.macro.mall.model.UmsMemberReceiveAddress;
|
||||
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||
import com.macro.mall.portal.domain.ConfirmOrderResult;
|
||||
import com.macro.mall.portal.domain.SmsCouponHistoryDetail;
|
||||
import com.macro.mall.model.*;
|
||||
import com.macro.mall.portal.domain.*;
|
||||
import com.macro.mall.portal.service.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -30,6 +27,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
private UmsMemberCouponService memberCouponService;
|
||||
@Autowired
|
||||
private UmsIntegrationConsumeSettingMapper integrationConsumeSettingMapper;
|
||||
@Autowired
|
||||
private PmsSkuStockMapper skuStockMapper;
|
||||
@Override
|
||||
public ConfirmOrderResult generateConfirmOrder() {
|
||||
ConfirmOrderResult result = new ConfirmOrderResult();
|
||||
@@ -54,6 +53,50 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult generateOrder(OrderParam orderParam) {
|
||||
//获取购物车及优惠信息
|
||||
UmsMember currentMember = memberService.getCurrentMember();
|
||||
List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId());
|
||||
//判断购物车中商品是否都有库存
|
||||
if(!hasStock(cartPromotionItemList)){
|
||||
return new CommonResult().failed("库存不足,无法下单");
|
||||
}
|
||||
//判断优惠券是否可用
|
||||
//可用情况下分摊到可用商品中
|
||||
//判断积分是否可用
|
||||
//可用情况下分摊到可用商品中
|
||||
//进行库存锁定
|
||||
lockStock(cartPromotionItemList);
|
||||
//计算运费
|
||||
//根据商品合计、运费、活动优惠、优惠券、积分计算应付金额
|
||||
//转化为订单信息并插入数据库
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 锁定下单商品的所有库存
|
||||
*/
|
||||
private void lockStock(List<CartPromotionItem> cartPromotionItemList) {
|
||||
for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
|
||||
PmsSkuStock skuStock = skuStockMapper.selectByPrimaryKey(cartPromotionItem.getProductSkuId());
|
||||
skuStock.setLockStock(skuStock.getStock()+cartPromotionItem.getQuantity());
|
||||
skuStockMapper.updateByPrimaryKeySelective(skuStock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断下单商品是否都有库存
|
||||
*/
|
||||
private boolean hasStock(List<CartPromotionItem> cartPromotionItemList) {
|
||||
for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
|
||||
if(cartPromotionItem.getRealStock()<=0){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算购物车中商品的价格
|
||||
*/
|
||||
|
||||
@@ -45,8 +45,10 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
|
||||
BeanUtils.copyProperties(item,cartPromotionItem);
|
||||
cartPromotionItem.setPromotionMessage("单品促销");
|
||||
//商品原价-促销价
|
||||
BigDecimal originalPrice = getOriginalPrice(promotionProduct, item.getProductSkuId());
|
||||
cartPromotionItem.setReduceAmount(originalPrice.subtract(getSinglePromotionPrice(promotionProduct, item.getProductSkuId())));
|
||||
PmsSkuStock skuStock = getOriginalPrice(promotionProduct, item.getProductSkuId());
|
||||
BigDecimal originalPrice = skuStock.getPrice();
|
||||
cartPromotionItem.setReduceAmount(originalPrice.subtract(skuStock.getPromotionPrice()));
|
||||
cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
|
||||
cartPromotionItemList.add(cartPromotionItem);
|
||||
}
|
||||
} else if (promotionType == 3) {
|
||||
@@ -60,13 +62,15 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
|
||||
String message = getLadderPromotionMessage(ladder);
|
||||
cartPromotionItem.setPromotionMessage(message);
|
||||
//商品原价-折扣金额*商品原价
|
||||
BigDecimal originalPrice = getOriginalPrice(promotionProduct, item.getProductSkuId());
|
||||
PmsSkuStock skuStock = getOriginalPrice(promotionProduct,item.getProductSkuId());
|
||||
BigDecimal originalPrice = skuStock.getPrice();
|
||||
BigDecimal reduceAmount = originalPrice.subtract(ladder.getDiscount().multiply(originalPrice));
|
||||
cartPromotionItem.setReduceAmount(reduceAmount);
|
||||
cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
|
||||
cartPromotionItemList.add(cartPromotionItem);
|
||||
}
|
||||
}else{
|
||||
handleNoReduce(cartPromotionItemList,itemList);
|
||||
handleNoReduce(cartPromotionItemList,itemList,promotionProduct);
|
||||
}
|
||||
} else if (promotionType == 4) {
|
||||
//满减
|
||||
@@ -79,17 +83,19 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
|
||||
String message = getFullReductionPromotionMessage(fullReduction);
|
||||
cartPromotionItem.setPromotionMessage(message);
|
||||
//(商品原价/总价)*满减金额
|
||||
BigDecimal originalPrice = getOriginalPrice(promotionProduct, item.getProductSkuId());
|
||||
PmsSkuStock skuStock= getOriginalPrice(promotionProduct, item.getProductSkuId());
|
||||
BigDecimal originalPrice = skuStock.getPrice();
|
||||
BigDecimal reduceAmount = originalPrice.divide(totalAmount,RoundingMode.HALF_EVEN).multiply(fullReduction.getReducePrice());
|
||||
cartPromotionItem.setReduceAmount(reduceAmount);
|
||||
cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
|
||||
cartPromotionItemList.add(cartPromotionItem);
|
||||
}
|
||||
}else{
|
||||
handleNoReduce(cartPromotionItemList,itemList);
|
||||
handleNoReduce(cartPromotionItemList,itemList,promotionProduct);
|
||||
}
|
||||
} else {
|
||||
//无优惠
|
||||
handleNoReduce(cartPromotionItemList, itemList);
|
||||
handleNoReduce(cartPromotionItemList, itemList,promotionProduct);
|
||||
}
|
||||
}
|
||||
return cartPromotionItemList;
|
||||
@@ -142,12 +148,14 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
|
||||
/**
|
||||
* 对没满足优惠条件的商品进行处理
|
||||
*/
|
||||
private void handleNoReduce(List<CartPromotionItem> cartPromotionItemList, List<OmsCartItem> itemList) {
|
||||
private void handleNoReduce(List<CartPromotionItem> cartPromotionItemList, List<OmsCartItem> itemList,PromotionProduct promotionProduct) {
|
||||
for (OmsCartItem item : itemList) {
|
||||
CartPromotionItem cartPromotionItem = new CartPromotionItem();
|
||||
BeanUtils.copyProperties(item,cartPromotionItem);
|
||||
cartPromotionItem.setPromotionMessage("无优惠");
|
||||
cartPromotionItem.setReduceAmount(new BigDecimal(0));
|
||||
PmsSkuStock skuStock = getOriginalPrice(promotionProduct,item.getProductSkuId());
|
||||
cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
|
||||
cartPromotionItemList.add(cartPromotionItem);
|
||||
}
|
||||
}
|
||||
@@ -221,31 +229,19 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
|
||||
for (OmsCartItem item : itemList) {
|
||||
//计算出商品原价
|
||||
PromotionProduct promotionProduct = getPromotionProductById(item.getProductId(), promotionProductList);
|
||||
BigDecimal price = getOriginalPrice(promotionProduct,item.getProductSkuId());
|
||||
amount = amount.add(price.multiply(new BigDecimal(item.getQuantity())));
|
||||
PmsSkuStock skuStock = getOriginalPrice(promotionProduct,item.getProductSkuId());
|
||||
amount = amount.add(skuStock.getPrice().multiply(new BigDecimal(item.getQuantity())));
|
||||
}
|
||||
return amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品的单品促销价格
|
||||
*/
|
||||
private BigDecimal getSinglePromotionPrice(PromotionProduct promotionProduct, Long productSkuId) {
|
||||
for (PmsSkuStock skuStock : promotionProduct.getSkuStockList()) {
|
||||
if (productSkuId.equals(skuStock.getId()) ) {
|
||||
return skuStock.getPromotionPrice();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品的原价
|
||||
*/
|
||||
private BigDecimal getOriginalPrice(PromotionProduct promotionProduct, Long productSkuId) {
|
||||
private PmsSkuStock getOriginalPrice(PromotionProduct promotionProduct, Long productSkuId) {
|
||||
for (PmsSkuStock skuStock : promotionProduct.getSkuStockList()) {
|
||||
if (productSkuId.equals(skuStock.getId())) {
|
||||
return skuStock.getPrice();
|
||||
return skuStock;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user