Commit 630cd1b4 by xiaoer.li@freemud.com

Merge remote-tracking branch 'remotes/origin/feature/促销算价基于最新master的分支' into qa

parents 0d04bddf 25d58def
......@@ -71,7 +71,7 @@ public interface CouponService {
* @param cartGoods
* @return
*/
ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType);
ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType, int isNew);
/**
* 获取卡券服务商户密钥
......
......@@ -373,8 +373,14 @@ public class CouponServiceImpl implements CouponService {
}
@Override
public ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId
, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType) {
public ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods
, String partnerId
, String userId
, String storeId
, String couponCode
, boolean hasGoodsCoupon
, Integer orderType
, int isNew) {
GetMemberCouponListRequestDto getMemberCouponListRequestDto = new GetMemberCouponListRequestDto(partnerId, userId);
getMemberCouponListRequestDto.setStatusFlags(Arrays.asList(CouponStatus.STATUS_0.getCode()));
getMemberCouponListRequestDto.setPageNum(1);
......@@ -413,14 +419,14 @@ public class CouponServiceImpl implements CouponService {
}
}
});
List<CouponStateVo> couponStateList = buildAvailiableCoupons(cartGoods, partnerId, storeId, couponCodes);
List<CouponStateVo> couponStateList = buildAvailiableCoupons(cartGoods, partnerId, storeId, couponCodes, isNew);
if (CollectionUtils.isNotEmpty(couponStateList)) {
return returnSuccessAvailiableCoupons(couponCode, hasGoodsCoupon, availableCouponResponseVo, usableCoupons, disableCoupons, memberCouponMap, couponStateList);
}
return null;
}
private List<CouponStateVo> buildAvailiableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes) {
private List<CouponStateVo> buildAvailiableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes, int isNew) {
String appSecret = getAppSecret(partnerId);
// 最大15一提交
int maxNum = 15;
......@@ -433,7 +439,7 @@ public class CouponServiceImpl implements CouponService {
List<Product> productList = Lists.newArrayList();
// 优惠券优先级最高,根据商品原价做计算
// 订单金额
Long totalAmount = createProductRequest(cartGoods, productList);
Long totalAmount = createProductRequest(cartGoods, productList, isNew);
couponAvailableReqVo.setTotalAmount(Integer.valueOf(totalAmount + ""));
couponAvailableReqVo.setProductList(productList);
couponAvailableReqVo.setChannelCodeList(commonService.getOrgCodes(partnerId, storeId));
......@@ -543,37 +549,62 @@ public class CouponServiceImpl implements CouponService {
return availableCouponResponseVo;
}
private Long createProductRequest(List<CartGoods> cartGoods, List<Product> productList) {
private Long createProductRequest(List<CartGoods> cartGoods, List<Product> productList, int isNew) {
Long totalAmount = 0L;
for (CartGoods cartGood : cartGoods) {
// 剔除商品券得商品
if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId())) {
continue;
}
Product product = new Product();
product.setProductId(StringUtils.isEmpty(cartGood.getSkuId()) ? cartGood.getSpuId() : cartGood.getSkuId());
// 普通商品价格
product.setAmount(Integer.valueOf(cartGood.getOriginalPrice() + ""));
// 套餐价格为: 套餐价+可选商品总价格
if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGood.getGoodsType())) {
Long finalPrice = cartGood.getFinalPrice();
if (CollectionUtils.isNotEmpty(cartGood.getProductGroupList())) {
finalPrice += cartGood.getProductGroupList().stream().mapToLong(group -> group.getFinalPrice() * group.getQty()).sum();
if (isNew == 1) {
for (CartGoods cartGood : cartGoods) {
// 剔除商品券得商品
if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId())) {
continue;
}
Product product = new Product();
product.setProductId(StringUtils.isEmpty(cartGood.getSkuId()) ? cartGood.getSpuId() : cartGood.getSkuId());
// 普通商品价格
product.setAmount(cartGood.getAmount().intValue());
totalAmount = totalAmount + cartGood.getAmount();
// todo :小料价格累加到主商品上
if (CollectionUtils.isNotEmpty(cartGood.getProductMaterialList())) {
for (CartGoods.MaterialGoods materialGoods : cartGood.getProductMaterialList()) {
product.setAmount(product.getAmount() + materialGoods.getAmount().intValue());
totalAmount = totalAmount + materialGoods.getAmount();
}
}
product.setAmount(finalPrice.intValue());
// 数量
product.setQuantity(cartGood.getQty());
productList.add(product);
}
} else {
for (CartGoods cartGood : cartGoods) {
// 剔除商品券得商品
if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId())) {
continue;
}
Product product = new Product();
product.setProductId(StringUtils.isEmpty(cartGood.getSkuId()) ? cartGood.getSpuId() : cartGood.getSkuId());
// 普通商品价格
product.setAmount(Integer.valueOf(cartGood.getOriginalPrice() + ""));
// 套餐价格为: 套餐价+可选商品总价格
if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGood.getGoodsType())) {
Long finalPrice = cartGood.getFinalPrice();
if (CollectionUtils.isNotEmpty(cartGood.getProductGroupList())) {
finalPrice += cartGood.getProductGroupList().stream().mapToLong(group -> group.getFinalPrice() * group.getQty()).sum();
}
product.setAmount(finalPrice.intValue());
}
totalAmount = totalAmount + product.getAmount() * cartGood.getQty();
// todo :小料价格累加到主商品上
if (CollectionUtils.isNotEmpty(cartGood.getProductMaterialList())) {
for (CartGoods.MaterialGoods materialGoods : cartGood.getProductMaterialList()) {
product.setAmount(product.getAmount() + Integer.valueOf(materialGoods.getOriginalPrice() + ""));
totalAmount = totalAmount + materialGoods.getOriginalPrice() * cartGood.getQty();
totalAmount = totalAmount + product.getAmount() * cartGood.getQty();
// todo :小料价格累加到主商品上
if (CollectionUtils.isNotEmpty(cartGood.getProductMaterialList())) {
for (CartGoods.MaterialGoods materialGoods : cartGood.getProductMaterialList()) {
product.setAmount(product.getAmount() + Integer.valueOf(materialGoods.getOriginalPrice() + ""));
totalAmount = totalAmount + materialGoods.getOriginalPrice() * cartGood.getQty();
}
}
// 数量
product.setQuantity(cartGood.getQty());
productList.add(product);
}
// 数量
product.setQuantity(cartGood.getQty());
productList.add(product);
}
return totalAmount;
}
......
......@@ -64,23 +64,18 @@ public class CalculationCommonService {
originalAmount = 0L;
amount = 0L;
packageAmount = 0L;
//CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods find = goods.stream().filter((k) -> k.getCartGoodsUid().equals(cartGoods.getCartGoodsUid())).findFirst().get();
//if (find == null) continue;
this.rowRealAmount(goods, cartGoods);
//成交价行记录
//amount += find.getRealAmount() * cartGoods.getQty();
amount = cartGoods.getAmount();
//cartGoods.setAmount(amount);
totalAmount += amount;
//原价行记录
originalAmount = cartGoods.getOriginalPrice() * cartGoods.getQty();
originalAmount = cartGoods.getOriginalPrice();
cartGoods.setOriginalAmount(originalAmount);
totalOriginalAmount += originalAmount;
//包装费行记录
packageAmount = cartGoods.getPackPrice() * cartGoods.getQty();
cartGoods.setPackPrice(packageAmount);
totalPackageAmount += packageAmount;
}
shoppingCartGoodsResponseVo.setOriginalTotalAmount(discountResult == null ? totalOriginalAmount : discountResult.getOriginalTotalAmount());
shoppingCartGoodsResponseVo.setTotalAmount(discountResult == null ? totalAmount : discountResult.getTotalAmount());
......@@ -97,22 +92,29 @@ public class CalculationCommonService {
if (find == null) return;
cartGoods.setAmount(find.getRealAmount());
cartGoods.setOriginalAmount(find.getOriginalPrice());
Integer type = 2;
if (CollectionUtils.isEmpty(cartGoods.getProductGroupList())) return;
Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial> choices = find.getSmallMaterial()
.stream().filter(d -> type.equals(d.getType()))
.collect(Collectors.toMap(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial::getGoodsId, Function.identity(), (k1, k2) -> k1));
long amount = 0L;
long original = 0L;
//
for (CartGoods.ComboxGoods choice : cartGoods.getProductGroupList()) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.SmallMaterial mt = choices.get(choice.getGoodsId());
if (mt == null) {
amount = choice.getAmount() * cartGoods.getQty();
amount += choice.getAmount() * cartGoods.getQty();
original += choice.getOriginalPrice() * cartGoods.getQty();
} else {
amount += mt.getRealAmount();
original += mt.getOriginalPrice();
choice.setAmount(mt.getRealAmount().longValue());
choice.setOriginalAmount(original);
}
}
cartGoods.setAmount(cartGoods.getAmount() + amount);
cartGoods.setOriginalAmount(cartGoods.getOriginalMaterialAmount() + original);
}
/**
......
......@@ -48,8 +48,14 @@ public class CouponSharingService {
// 是否存在商品券
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
// 构建可用不可用优惠券
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList, couponPromotionVO.getPartnerId()
, couponPromotionVO.getUserId(), couponPromotionVO.getStoreId(), couponPromotionVO.getCouponCode(), hasGoodssCoupon, couponPromotionVO.getOrderType());
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList
, couponPromotionVO.getPartnerId()
, couponPromotionVO.getUserId()
, couponPromotionVO.getStoreId()
, couponPromotionVO.getCouponCode()
, hasGoodssCoupon
, couponPromotionVO.getOrderType()
, 1);
if (Objects.equals(activityClassifyCouponBean, null)) {
// 构建一个空得订单券信息
activityClassifyCouponBean = createEmptyActivityCouponBean();
......
......@@ -133,7 +133,7 @@ public class CouponServiceTest {
List<CartGoods> cartGoods = Lists.newArrayList();
CartGoods cartGood = new CartGoods();
cartGoods.add(cartGood);
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoods, "1864", "122424124", "1011", "88123124", true, 1);
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoods, "1864", "122424124", "1011", "88123124", true, 1, 1);
assertTrue(activityClassifyCouponBean.getCouponNum() >= 1);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment