添加计算购物车优惠的功能
This commit is contained in:
parent
abfb6c13e6
commit
5790bb6480
@ -2,6 +2,7 @@ package com.macro.mall.portal.controller;
|
|||||||
|
|
||||||
import com.macro.mall.model.OmsCartItem;
|
import com.macro.mall.model.OmsCartItem;
|
||||||
import com.macro.mall.portal.domain.CartProduct;
|
import com.macro.mall.portal.domain.CartProduct;
|
||||||
|
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||||
import com.macro.mall.portal.domain.CommonResult;
|
import com.macro.mall.portal.domain.CommonResult;
|
||||||
import com.macro.mall.portal.service.OmsCartItemService;
|
import com.macro.mall.portal.service.OmsCartItemService;
|
||||||
import com.macro.mall.portal.service.UmsMemberService;
|
import com.macro.mall.portal.service.UmsMemberService;
|
||||||
@ -30,7 +31,6 @@ public class OmsCartItemController {
|
|||||||
@RequestMapping(value = "/add", method = RequestMethod.POST)
|
@RequestMapping(value = "/add", method = RequestMethod.POST)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Object add(@RequestBody OmsCartItem cartItem) {
|
public Object add(@RequestBody OmsCartItem cartItem) {
|
||||||
cartItem.setMemberId(memberService.getCurrentMember().getId());
|
|
||||||
int count = cartItemService.add(cartItem);
|
int count = cartItemService.add(cartItem);
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
return new CommonResult().success(count);
|
return new CommonResult().success(count);
|
||||||
@ -46,6 +46,14 @@ public class OmsCartItemController {
|
|||||||
return new CommonResult().success(cartItemList);
|
return new CommonResult().success(cartItemList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("获取某个会员的购物车列表,包括促销信息")
|
||||||
|
@RequestMapping(value = "/list/promotion", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
public Object listPromotion() {
|
||||||
|
List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(memberService.getCurrentMember().getId());
|
||||||
|
return new CommonResult().success(cartPromotionItemList);
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation("修改购物车中某个商品的数量")
|
@ApiOperation("修改购物车中某个商品的数量")
|
||||||
@RequestMapping(value = "/update/quantity", method = RequestMethod.GET)
|
@RequestMapping(value = "/update/quantity", method = RequestMethod.GET)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@ -70,7 +78,6 @@ public class OmsCartItemController {
|
|||||||
@RequestMapping(value = "/update/attr", method = RequestMethod.POST)
|
@RequestMapping(value = "/update/attr", method = RequestMethod.POST)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Object updateAttr(@RequestBody OmsCartItem cartItem) {
|
public Object updateAttr(@RequestBody OmsCartItem cartItem) {
|
||||||
cartItem.setMemberId(memberService.getCurrentMember().getId());
|
|
||||||
int count = cartItemService.updateAttr(cartItem);
|
int count = cartItemService.updateAttr(cartItem);
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
return new CommonResult().success(count);
|
return new CommonResult().success(count);
|
||||||
@ -88,4 +95,15 @@ public class OmsCartItemController {
|
|||||||
}
|
}
|
||||||
return new CommonResult().failed();
|
return new CommonResult().failed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("清空购物车")
|
||||||
|
@RequestMapping(value = "/clear", method = RequestMethod.POST)
|
||||||
|
@ResponseBody
|
||||||
|
public Object clear() {
|
||||||
|
int count = cartItemService.clear(memberService.getCurrentMember().getId());
|
||||||
|
if (count > 0) {
|
||||||
|
return new CommonResult().success(count);
|
||||||
|
}
|
||||||
|
return new CommonResult().failed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
package com.macro.mall.portal.dao;
|
package com.macro.mall.portal.dao;
|
||||||
|
|
||||||
import com.macro.mall.portal.domain.CartProduct;
|
import com.macro.mall.portal.domain.CartProduct;
|
||||||
|
import com.macro.mall.portal.domain.PromotionProduct;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 前台系统自定义商品Dao
|
* 前台系统自定义商品Dao
|
||||||
* Created by macro on 2018/8/2.
|
* Created by macro on 2018/8/2.
|
||||||
*/
|
*/
|
||||||
public interface PortalProductDao {
|
public interface PortalProductDao {
|
||||||
CartProduct getCartProduct(@Param("id") Long id);
|
CartProduct getCartProduct(@Param("id") Long id);
|
||||||
|
List<PromotionProduct> getPromotionProductList(@Param("ids") List<Long> ids);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package com.macro.mall.portal.domain;
|
||||||
|
|
||||||
|
import com.macro.mall.model.OmsCartItem;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by macro on 2018/8/27.
|
||||||
|
* 购物车中促销信息的封装
|
||||||
|
*/
|
||||||
|
public class CartPromotionItem {
|
||||||
|
private OmsCartItem cartItem;
|
||||||
|
//促销活动信息
|
||||||
|
private String promotionMessage;
|
||||||
|
//促销活动减去的金额,针对每个商品
|
||||||
|
private BigDecimal reduceAmount;
|
||||||
|
|
||||||
|
public OmsCartItem getCartItem() {
|
||||||
|
return cartItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCartItem(OmsCartItem cartItem) {
|
||||||
|
this.cartItem = cartItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPromotionMessage() {
|
||||||
|
return promotionMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPromotionMessage(String promotionMessage) {
|
||||||
|
this.promotionMessage = promotionMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getReduceAmount() {
|
||||||
|
return reduceAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReduceAmount(BigDecimal reduceAmount) {
|
||||||
|
this.reduceAmount = reduceAmount;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.macro.mall.portal.domain;
|
||||||
|
|
||||||
|
import com.macro.mall.model.PmsProduct;
|
||||||
|
import com.macro.mall.model.PmsProductFullReduction;
|
||||||
|
import com.macro.mall.model.PmsProductLadder;
|
||||||
|
import com.macro.mall.model.PmsSkuStock;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by macro on 2018/8/27.
|
||||||
|
* 商品的促销信息,包括sku、打折优惠、满减优惠
|
||||||
|
*/
|
||||||
|
public class PromotionProduct extends PmsProduct {
|
||||||
|
//商品库存信息
|
||||||
|
private List<PmsSkuStock> skuStockList;
|
||||||
|
//商品打折信息
|
||||||
|
private List<PmsProductLadder> productLadderList;
|
||||||
|
//商品满减信息
|
||||||
|
private List<PmsProductFullReduction> productFullReductionList;
|
||||||
|
|
||||||
|
public List<PmsSkuStock> getSkuStockList() {
|
||||||
|
return skuStockList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSkuStockList(List<PmsSkuStock> skuStockList) {
|
||||||
|
this.skuStockList = skuStockList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PmsProductLadder> getProductLadderList() {
|
||||||
|
return productLadderList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProductLadderList(List<PmsProductLadder> productLadderList) {
|
||||||
|
this.productLadderList = productLadderList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PmsProductFullReduction> getProductFullReductionList() {
|
||||||
|
return productFullReductionList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProductFullReductionList(List<PmsProductFullReduction> productFullReductionList) {
|
||||||
|
this.productFullReductionList = productFullReductionList;
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@ package com.macro.mall.portal.service;
|
|||||||
|
|
||||||
import com.macro.mall.model.OmsCartItem;
|
import com.macro.mall.model.OmsCartItem;
|
||||||
import com.macro.mall.portal.domain.CartProduct;
|
import com.macro.mall.portal.domain.CartProduct;
|
||||||
|
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -22,6 +23,11 @@ public interface OmsCartItemService {
|
|||||||
*/
|
*/
|
||||||
List<OmsCartItem> list(Long memberId);
|
List<OmsCartItem> list(Long memberId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取包含促销活动信息的购物车列表
|
||||||
|
*/
|
||||||
|
List<CartPromotionItem> listPromotion(Long memberId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改某个购物车商品的数量
|
* 修改某个购物车商品的数量
|
||||||
*/
|
*/
|
||||||
@ -42,4 +48,9 @@ public interface OmsCartItemService {
|
|||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
int updateAttr(OmsCartItem cartItem);
|
int updateAttr(OmsCartItem cartItem);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空购物车
|
||||||
|
*/
|
||||||
|
int clear(Long memberId);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.macro.mall.portal.service;
|
||||||
|
|
||||||
|
import com.macro.mall.model.OmsCartItem;
|
||||||
|
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by macro on 2018/8/27.
|
||||||
|
* 促销管理Service
|
||||||
|
*/
|
||||||
|
public interface OmsPromotionService {
|
||||||
|
/**
|
||||||
|
* 计算购物车中的促销活动信息
|
||||||
|
* @param cartItemList 购物车
|
||||||
|
*/
|
||||||
|
List<CartPromotionItem> calcCartPromotion(List<OmsCartItem> cartItemList);
|
||||||
|
}
|
@ -3,14 +3,19 @@ package com.macro.mall.portal.service.impl;
|
|||||||
import com.macro.mall.mapper.OmsCartItemMapper;
|
import com.macro.mall.mapper.OmsCartItemMapper;
|
||||||
import com.macro.mall.model.OmsCartItem;
|
import com.macro.mall.model.OmsCartItem;
|
||||||
import com.macro.mall.model.OmsCartItemExample;
|
import com.macro.mall.model.OmsCartItemExample;
|
||||||
|
import com.macro.mall.model.UmsMember;
|
||||||
import com.macro.mall.portal.dao.PortalProductDao;
|
import com.macro.mall.portal.dao.PortalProductDao;
|
||||||
import com.macro.mall.portal.domain.CartProduct;
|
import com.macro.mall.portal.domain.CartProduct;
|
||||||
|
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||||
import com.macro.mall.portal.service.OmsCartItemService;
|
import com.macro.mall.portal.service.OmsCartItemService;
|
||||||
|
import com.macro.mall.portal.service.OmsPromotionService;
|
||||||
|
import com.macro.mall.portal.service.UmsMemberService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -23,14 +28,24 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
|
|||||||
private OmsCartItemMapper cartItemMapper;
|
private OmsCartItemMapper cartItemMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private PortalProductDao productDao;
|
private PortalProductDao productDao;
|
||||||
|
@Autowired
|
||||||
|
private OmsPromotionService promotionService;
|
||||||
|
@Autowired
|
||||||
|
private UmsMemberService memberService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int add(OmsCartItem cartItem) {
|
public int add(OmsCartItem cartItem) {
|
||||||
int count;
|
int count;
|
||||||
|
UmsMember currentMember =memberService.getCurrentMember();
|
||||||
|
cartItem.setMemberId(currentMember.getId());
|
||||||
|
cartItem.setMemberNickname(currentMember.getNickname());
|
||||||
|
cartItem.setDeleteStatus(0);
|
||||||
OmsCartItem existCartItem = getCartItem(cartItem);
|
OmsCartItem existCartItem = getCartItem(cartItem);
|
||||||
if (existCartItem == null) {
|
if (existCartItem == null) {
|
||||||
|
cartItem.setCreateDate(new Date());
|
||||||
count = cartItemMapper.insert(cartItem);
|
count = cartItemMapper.insert(cartItem);
|
||||||
} else {
|
} else {
|
||||||
|
cartItem.setModifyDate(new Date());
|
||||||
existCartItem.setQuantity(existCartItem.getQuantity() + cartItem.getQuantity());
|
existCartItem.setQuantity(existCartItem.getQuantity() + cartItem.getQuantity());
|
||||||
count = cartItemMapper.updateByPrimaryKey(existCartItem);
|
count = cartItemMapper.updateByPrimaryKey(existCartItem);
|
||||||
}
|
}
|
||||||
@ -67,6 +82,12 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
|
|||||||
return cartItemMapper.selectByExample(example);
|
return cartItemMapper.selectByExample(example);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CartPromotionItem> listPromotion(Long memberId) {
|
||||||
|
List<OmsCartItem> cartItemList = list(memberId);
|
||||||
|
return promotionService.calcCartPromotion(cartItemList);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int updateQuantity(Long id, Long memberId, Integer quantity) {
|
public int updateQuantity(Long id, Long memberId, Integer quantity) {
|
||||||
OmsCartItem cartItem = new OmsCartItem();
|
OmsCartItem cartItem = new OmsCartItem();
|
||||||
@ -96,10 +117,20 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
|
|||||||
//删除原购物车信息
|
//删除原购物车信息
|
||||||
OmsCartItem updateCart = new OmsCartItem();
|
OmsCartItem updateCart = new OmsCartItem();
|
||||||
updateCart.setId(cartItem.getId());
|
updateCart.setId(cartItem.getId());
|
||||||
|
updateCart.setModifyDate(new Date());
|
||||||
updateCart.setDeleteStatus(1);
|
updateCart.setDeleteStatus(1);
|
||||||
cartItemMapper.updateByPrimaryKeySelective(updateCart);
|
cartItemMapper.updateByPrimaryKeySelective(updateCart);
|
||||||
cartItem.setId(null);
|
cartItem.setId(null);
|
||||||
add(cartItem);
|
add(cartItem);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int clear(Long memberId) {
|
||||||
|
OmsCartItem record = new OmsCartItem();
|
||||||
|
record.setDeleteStatus(1);
|
||||||
|
OmsCartItemExample example = new OmsCartItemExample();
|
||||||
|
example.createCriteria().andMemberIdEqualTo(memberId);
|
||||||
|
return cartItemMapper.updateByExampleSelective(record,example);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,261 @@
|
|||||||
|
package com.macro.mall.portal.service.impl;
|
||||||
|
|
||||||
|
import com.macro.mall.model.OmsCartItem;
|
||||||
|
import com.macro.mall.model.PmsProductFullReduction;
|
||||||
|
import com.macro.mall.model.PmsProductLadder;
|
||||||
|
import com.macro.mall.model.PmsSkuStock;
|
||||||
|
import com.macro.mall.portal.dao.PortalProductDao;
|
||||||
|
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||||
|
import com.macro.mall.portal.domain.PromotionProduct;
|
||||||
|
import com.macro.mall.portal.service.OmsPromotionService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by macro on 2018/8/27.
|
||||||
|
* 促销管理Service实现类
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class OmsPromotionServiceImpl implements OmsPromotionService {
|
||||||
|
@Autowired
|
||||||
|
private PortalProductDao portalProductDao;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CartPromotionItem> calcCartPromotion(List<OmsCartItem> cartItemList) {
|
||||||
|
//1.先根据productId对CartItem进行分组,以spu为单位进行计算优惠
|
||||||
|
Map<Long, List<OmsCartItem>> productCartMap = groupCartItemBySpu(cartItemList);
|
||||||
|
//2.查询所有商品的优惠相关信息
|
||||||
|
List<PromotionProduct> promotionProductList = getPromotionProductList(cartItemList);
|
||||||
|
//3.根据商品促销类型计算商品促销优惠价格
|
||||||
|
List<CartPromotionItem> cartPromotionItemList = new ArrayList<>();
|
||||||
|
for (Map.Entry<Long, List<OmsCartItem>> entry : productCartMap.entrySet()) {
|
||||||
|
Long productId = entry.getKey();
|
||||||
|
PromotionProduct promotionProduct = getPromotionProductById(productId, promotionProductList);
|
||||||
|
List<OmsCartItem> itemList = entry.getValue();
|
||||||
|
Integer promotionType = promotionProduct.getPromotionType();
|
||||||
|
if (promotionType == 1) {
|
||||||
|
//单品促销
|
||||||
|
for (OmsCartItem item : itemList) {
|
||||||
|
CartPromotionItem cartPromotionItem = new CartPromotionItem();
|
||||||
|
cartPromotionItem.setCartItem(item);
|
||||||
|
cartPromotionItem.setPromotionMessage("单品促销");
|
||||||
|
//商品原价-促销价
|
||||||
|
cartPromotionItem.setReduceAmount(getOriginalPrice(promotionProduct, item.getProductSkuId()).subtract(getSinglePromotionPrice(promotionProduct, item.getProductSkuId())));
|
||||||
|
cartPromotionItemList.add(cartPromotionItem);
|
||||||
|
}
|
||||||
|
} else if (promotionType == 3) {
|
||||||
|
//打折优惠
|
||||||
|
int count = getCartItemCount(itemList);
|
||||||
|
PmsProductLadder ladder = getProductLadder(count, promotionProduct.getProductLadderList());
|
||||||
|
if(ladder!=null){
|
||||||
|
for (OmsCartItem item : itemList) {
|
||||||
|
CartPromotionItem cartPromotionItem = new CartPromotionItem();
|
||||||
|
cartPromotionItem.setCartItem(item);
|
||||||
|
String message = getLadderPromotionMessage(ladder);
|
||||||
|
cartPromotionItem.setPromotionMessage(message);
|
||||||
|
//商品原价-折扣金额*商品原价
|
||||||
|
BigDecimal originalPrice = getOriginalPrice(promotionProduct, item.getProductSkuId());
|
||||||
|
BigDecimal reduceAmount = originalPrice.subtract(ladder.getDiscount().multiply(originalPrice));
|
||||||
|
cartPromotionItem.setReduceAmount(reduceAmount);
|
||||||
|
cartPromotionItemList.add(cartPromotionItem);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
handleNoReduce(cartPromotionItemList,itemList);
|
||||||
|
}
|
||||||
|
} else if (promotionType == 4) {
|
||||||
|
//满减
|
||||||
|
BigDecimal totalAmount= getCartItemAmount(itemList,promotionProductList);
|
||||||
|
PmsProductFullReduction fullReduction = getProductFullReduction(totalAmount,promotionProduct.getProductFullReductionList());
|
||||||
|
if(fullReduction!=null){
|
||||||
|
for (OmsCartItem item : itemList) {
|
||||||
|
CartPromotionItem cartPromotionItem = new CartPromotionItem();
|
||||||
|
cartPromotionItem.setCartItem(item);
|
||||||
|
String message = getFullReductionPromotionMessage(fullReduction);
|
||||||
|
cartPromotionItem.setPromotionMessage(message);
|
||||||
|
//(商品原价/总价)*满减金额
|
||||||
|
BigDecimal reduceAmount = (getOriginalPrice(promotionProduct,item.getProductSkuId()).divide(totalAmount)).multiply(fullReduction.getReducePrice());
|
||||||
|
cartPromotionItem.setReduceAmount(reduceAmount);
|
||||||
|
cartPromotionItemList.add(cartPromotionItem);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
handleNoReduce(cartPromotionItemList,itemList);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//无优惠
|
||||||
|
handleNoReduce(cartPromotionItemList, itemList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cartPromotionItemList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询所有商品的优惠相关信息
|
||||||
|
*/
|
||||||
|
private List<PromotionProduct> getPromotionProductList(List<OmsCartItem> cartItemList) {
|
||||||
|
List<Long> productIdList = new ArrayList<>();
|
||||||
|
for(OmsCartItem cartItem:cartItemList){
|
||||||
|
productIdList.add(cartItem.getProductId());
|
||||||
|
}
|
||||||
|
return portalProductDao.getPromotionProductList(productIdList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 以spu为单位对购物车中商品进行分组
|
||||||
|
*/
|
||||||
|
private Map<Long, List<OmsCartItem>> groupCartItemBySpu(List<OmsCartItem> cartItemList) {
|
||||||
|
Map<Long, List<OmsCartItem>> productCartMap = new TreeMap<>();
|
||||||
|
for (OmsCartItem cartItem : cartItemList) {
|
||||||
|
List<OmsCartItem> productCartItemList = productCartMap.get(cartItem.getId());
|
||||||
|
if (productCartItemList == null) {
|
||||||
|
productCartItemList = new ArrayList<>();
|
||||||
|
productCartItemList.add(cartItem);
|
||||||
|
productCartMap.put(cartItem.getProductId(), productCartItemList);
|
||||||
|
} else {
|
||||||
|
productCartItemList.add(cartItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return productCartMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取满减促销消息
|
||||||
|
*/
|
||||||
|
private String getFullReductionPromotionMessage(PmsProductFullReduction fullReduction) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("满减优惠:");
|
||||||
|
sb.append("满");
|
||||||
|
sb.append(fullReduction.getFullPrice());
|
||||||
|
sb.append("元,");
|
||||||
|
sb.append("减");
|
||||||
|
sb.append(fullReduction.getReducePrice());
|
||||||
|
sb.append("元");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对没满足优惠条件的商品进行处理
|
||||||
|
*/
|
||||||
|
private void handleNoReduce(List<CartPromotionItem> cartPromotionItemList, List<OmsCartItem> itemList) {
|
||||||
|
for (OmsCartItem item : itemList) {
|
||||||
|
CartPromotionItem cartPromotionItem = new CartPromotionItem();
|
||||||
|
cartPromotionItem.setCartItem(item);
|
||||||
|
cartPromotionItem.setPromotionMessage("无优惠");
|
||||||
|
cartPromotionItem.setReduceAmount(new BigDecimal(0));
|
||||||
|
cartPromotionItemList.add(cartPromotionItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private PmsProductFullReduction getProductFullReduction(BigDecimal totalAmount,List<PmsProductFullReduction> fullReductionList) {
|
||||||
|
//按条件从高到低排序
|
||||||
|
fullReductionList.sort(new Comparator<PmsProductFullReduction>() {
|
||||||
|
@Override
|
||||||
|
public int compare(PmsProductFullReduction o1, PmsProductFullReduction o2) {
|
||||||
|
return o2.getFullPrice().subtract(o1.getFullPrice()).intValue();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
for(PmsProductFullReduction fullReduction:fullReductionList){
|
||||||
|
if(totalAmount.subtract(fullReduction.getFullPrice()).intValue()>=0){
|
||||||
|
return fullReduction;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取打折优惠的促销信息
|
||||||
|
*/
|
||||||
|
private String getLadderPromotionMessage(PmsProductLadder ladder) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("打折优惠:");
|
||||||
|
sb.append("满");
|
||||||
|
sb.append(ladder.getCount());
|
||||||
|
sb.append("件,");
|
||||||
|
sb.append("打");
|
||||||
|
sb.append(ladder.getDiscount().multiply(new BigDecimal(10)));
|
||||||
|
sb.append("折");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据购买商品数量获取满足条件的打折优惠策略
|
||||||
|
*/
|
||||||
|
private PmsProductLadder getProductLadder(int count, List<PmsProductLadder> productLadderList) {
|
||||||
|
//按数量从大到小排序
|
||||||
|
productLadderList.sort(new Comparator<PmsProductLadder>() {
|
||||||
|
@Override
|
||||||
|
public int compare(PmsProductLadder o1, PmsProductLadder o2) {
|
||||||
|
return o2.getCount() - o1.getCount();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
for (PmsProductLadder productLadder : productLadderList) {
|
||||||
|
if (count >= productLadder.getCount()) {
|
||||||
|
return productLadder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取购物车中指定商品的数量
|
||||||
|
*/
|
||||||
|
private int getCartItemCount(List<OmsCartItem> itemList) {
|
||||||
|
int count = 0;
|
||||||
|
for (OmsCartItem item : itemList) {
|
||||||
|
count += item.getQuantity();
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取购物车中指定商品的总价
|
||||||
|
*/
|
||||||
|
private BigDecimal getCartItemAmount(List<OmsCartItem> itemList, List<PromotionProduct> promotionProductList) {
|
||||||
|
BigDecimal amount = new BigDecimal(0);
|
||||||
|
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())));
|
||||||
|
}
|
||||||
|
return amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取商品的单品促销价格
|
||||||
|
*/
|
||||||
|
private BigDecimal getSinglePromotionPrice(PromotionProduct promotionProduct, Long productSkuId) {
|
||||||
|
for (PmsSkuStock skuStock : promotionProduct.getSkuStockList()) {
|
||||||
|
if (productSkuId == skuStock.getId()) {
|
||||||
|
return skuStock.getPromotionPrice();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取商品的原价
|
||||||
|
*/
|
||||||
|
private BigDecimal getOriginalPrice(PromotionProduct promotionProduct, Long productSkuId) {
|
||||||
|
for (PmsSkuStock skuStock : promotionProduct.getSkuStockList()) {
|
||||||
|
if (productSkuId.equals(skuStock.getId())) {
|
||||||
|
return skuStock.getPrice();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据商品id获取商品的促销信息
|
||||||
|
*/
|
||||||
|
private PromotionProduct getPromotionProductById(Long productId, List<PromotionProduct> promotionProductList) {
|
||||||
|
for (PromotionProduct promotionProduct : promotionProductList) {
|
||||||
|
if (productId.equals(promotionProduct.getId())) {
|
||||||
|
return promotionProduct;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -8,6 +8,15 @@
|
|||||||
<collection property="skuStockList" columnPrefix="sku_" resultMap="com.macro.mall.mapper.PmsSkuStockMapper.BaseResultMap">
|
<collection property="skuStockList" columnPrefix="sku_" resultMap="com.macro.mall.mapper.PmsSkuStockMapper.BaseResultMap">
|
||||||
</collection>
|
</collection>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
<resultMap id="promotionProductMap" type="com.macro.mall.portal.domain.PromotionProduct" extends="com.macro.mall.mapper.PmsProductMapper.BaseResultMap">
|
||||||
|
<id column="id" jdbcType="BIGINT" property="id" />
|
||||||
|
<collection property="skuStockList" columnPrefix="sku_" resultMap="com.macro.mall.mapper.PmsSkuStockMapper.BaseResultMap">
|
||||||
|
</collection>
|
||||||
|
<collection property="productLadderList" columnPrefix="ladder_" resultMap="com.macro.mall.mapper.PmsProductLadderMapper.BaseResultMap">
|
||||||
|
</collection>
|
||||||
|
<collection property="productFullReductionList" columnPrefix="full_" resultMap="com.macro.mall.mapper.PmsProductFullReductionMapper.BaseResultMap">
|
||||||
|
</collection>
|
||||||
|
</resultMap>
|
||||||
<select id="getCartProduct" resultMap="cartProductMap">
|
<select id="getCartProduct" resultMap="cartProductMap">
|
||||||
SELECT
|
SELECT
|
||||||
p.id id,
|
p.id id,
|
||||||
@ -36,4 +45,30 @@
|
|||||||
AND pa.type = 0
|
AND pa.type = 0
|
||||||
ORDER BY pa.sort desc
|
ORDER BY pa.sort desc
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getPromotionProductList" resultMap="promotionProductMap">
|
||||||
|
SELECT
|
||||||
|
p.id,
|
||||||
|
p.`name`,
|
||||||
|
p.promotion_type,
|
||||||
|
sku.id sku_id,
|
||||||
|
sku.price sku_price,
|
||||||
|
sku.sku_code sku_sku_code,
|
||||||
|
sku.promotion_price sku_promotion_price,
|
||||||
|
ladder.id ladder_id,
|
||||||
|
ladder.count ladder_count,
|
||||||
|
ladder.discount ladder_discount,
|
||||||
|
full_re.id full_id,
|
||||||
|
full_re.full_price full_full_price,
|
||||||
|
full_re.reduce_price full_reduce_price
|
||||||
|
FROM
|
||||||
|
pms_product p
|
||||||
|
LEFT JOIN pms_sku_stock sku ON p.id = sku.product_id
|
||||||
|
LEFT JOIN pms_product_ladder ladder ON p.id = ladder.product_id
|
||||||
|
LEFT JOIN pms_product_full_reduction full_re ON p.id = full_re.product_id
|
||||||
|
WHERE
|
||||||
|
p.id IN
|
||||||
|
<foreach collection="ids" open="(" close=")" item="id" separator=",">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.macro.mall.portal;
|
||||||
|
|
||||||
|
import com.macro.mall.portal.dao.PortalProductDao;
|
||||||
|
import com.macro.mall.portal.domain.PromotionProduct;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by macro on 2018/8/27.
|
||||||
|
* 前台商品查询逻辑单元测试
|
||||||
|
*/
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@SpringBootTest
|
||||||
|
public class PortalProductDaoTests {
|
||||||
|
@Autowired
|
||||||
|
private PortalProductDao portalProductDao;
|
||||||
|
@Test
|
||||||
|
public void testGetPromotionProductList(){
|
||||||
|
List<Long> ids = new ArrayList<>();
|
||||||
|
ids.add(26L);
|
||||||
|
ids.add(27L);
|
||||||
|
ids.add(28L);
|
||||||
|
ids.add(29L);
|
||||||
|
List<PromotionProduct> promotionProductList = portalProductDao.getPromotionProductList(ids);
|
||||||
|
Assert.assertEquals(4,promotionProductList.size());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user