Commit d8468fb3 by 缪晖

Merge branch 'feature/2.0.1-collageOrder-刘鹏飞' into 'qa'

拼单新增加车时间,用于给促销调用进行商品排序

See merge request !50
parents 2906d1b8 882a4ef7
......@@ -26,6 +26,12 @@ public class CartGoods {
* 购物车一行的Id(后台生成)
*/
private String cartGoodsUid = UUID.randomUUID().toString();
/**
* 加车时间
*/
private Long addCartTime;
/**
* 单规格spuId,多规格skuId
*/
......
......@@ -108,6 +108,10 @@ public class ActivityCalculationDiscountRequestDto {
*/
private String cartGoodsUid;
/**
* 加车时间
*/
private Long addCartTime;
/**
* 商品品类
*/
private String category;
......
......@@ -35,6 +35,11 @@ public class CartGoods {
private String originalGoodsUid;
/**
* 加车时间
*/
private Long addCartTime;
/**
* 单规格spuId,多规格skuId
*/
private String goodsId;
......
......@@ -93,6 +93,7 @@ public class BuyAndGiftsPromotionService implements IPromotionService {
cartGoods.setClassificationName(product.getCategoryName());
// nodeId标识activeCode,用于计算均摊时每个商品在每个活动上均摊金额
cartGoods.setNodeId(sendActivity.getActivityCode());
cartGoods.setOriginalGoodsUid(sendGoods.getOriginalGoodsUid());
this.setGiftExtra(cartGoods,product,cartGoodsList);
cartGoodsList.add(cartGoods);
totalGiftAmount += product.getFinalPrice() * sendGoods.getSendNumber();
......@@ -170,7 +171,10 @@ public class BuyAndGiftsPromotionService implements IPromotionService {
long count = cartGoodsList.stream().filter(c -> c.getSpuId().equals(cartGoods.getSpuId())).count();
//购物车内存在同类
if (count>0) {
CartGoods find = cartGoodsList.stream().filter(c -> c.getSpuId().equals(cartGoods.getSpuId())).findFirst().get();
CartGoods find = cartGoodsList.stream().filter(c -> c.getCartGoodsUid().equals(cartGoods.getOriginalGoodsUid())).findFirst().orElseGet(null);
if (null == find) {
find = cartGoodsList.stream().filter(c -> c.getSpuId().equals(cartGoods.getSpuId())).findFirst().get();
}
cartGoods.setExtra(find.getExtra());
cartGoods.setSpuName(find.getSpuName());
cartGoods.setSkuName(find.getSkuName());
......
......@@ -144,6 +144,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
cartGoods.setOpenId(currentUserInfoVo.getOpenId());
cartGoods.setUserName(currentUserInfoVo.getNickName());
cartGoods.setPhotoUrl(currentUserInfoVo.getPhotoUrl());
cartGoods.setAddCartTime(System.currentTimeMillis());
List<Long> productIds = new ArrayList<>();
productIds.add(Long.parseLong(goodsId));
......@@ -770,6 +771,17 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
if (CollectionUtils.isEmpty(calculationDiscountGoodsList)) {
return null;
}
// 调用促销前先对购物车行id进行排序
calculationDiscountGoodsList.sort((o1, o2) -> {
if (o1.getAddCartTime() == null || o2.getAddCartTime() == null) { return 0;}
if (o1.getAddCartTime() > o2.getAddCartTime()) {
return 1;
} else if (o1.getCartGoodsUid().hashCode() > o2.getCartGoodsUid().hashCode()) {
return -1;
} else {
return 0;
}
});
activityCalculationDiscountRequestDto.setGoods(calculationDiscountGoodsList);
activityCalculationDiscountRequestDto.setCoupons(coupons);
activityCalculationDiscountRequestDto.setOrgIds(commonService.getOrgIds(partnerId, storeId));
......@@ -777,8 +789,6 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
activityCalculationDiscountRequestDto.setIsMember(isMember);
ActivityCalculationDiscountResponseDto activityCalculationDiscountResponseDto;
try {
System.out.println("start discount");
System.out.println(JSON.toJSONString(activityCalculationDiscountRequestDto));
// 调用老促销接口
activityCalculationDiscountResponseDto = activityClient.calculationDiscount(activityCalculationDiscountRequestDto);
} catch (Exception ex) {
......@@ -1027,6 +1037,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
calculationDiscountGoods.setOriginalPrice(cartGoods.getFinalPrice());
calculationDiscountGoods.setMemberDiscount(cartGoods.getMemberDiscount());
calculationDiscountGoods.setSpuId(cartGoods.getSpuId());
calculationDiscountGoods.setAddCartTime(cartGoods.getAddCartTime());
//加料
if (CollectionUtils.isNotEmpty(cartGoods.getProductMaterialList())) {
......@@ -1062,6 +1073,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
calculationDiscountGoods.setGoodsQuantity(goodsQuantity);
calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(memberDiscount);
calculationDiscountGoods.setAddCartTime(System.currentTimeMillis());
this.addCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods);
}
......
......@@ -10,6 +10,7 @@ import cn.freemud.service.IPromotionService;
import com.google.common.collect.Lists;
import lombok.Data;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -37,15 +38,32 @@ public class TwoNDiscountServiceImpl implements IPromotionService {
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
List<ApportionGoodsDetail> apportionGoodsDetailList = getApportionGoodsDetail(calculationDiscountResult);
if (!CollectionUtils.isEmpty(apportionGoodsDetailList)) {
List<String> goodIdsList = apportionGoodsDetailList.stream().map(ApportionGoodsDetail::getGoodsId).collect(Collectors.toList());
List<CartGoods> list = cartGoodsList.stream().filter(cartGoods -> goodIdsList.contains(cartGoods.getGoodsId())).collect(Collectors.toList());
Map<String, ApportionGoodsDetail> map = apportionGoodsDetailList.stream().collect(Collectors.toMap(ApportionGoodsDetail::getGoodsId, detail -> detail));
Map<String, Long> mapPro = apportionGoodsDetailList.stream().collect(Collectors.toMap(ApportionGoodsDetail::getGoodsId, detail -> detail.getActivityApportionAmount()));
if (!CollectionUtils.isEmpty(list)) {
for (CartGoods cartGoods : list) {
if (mapPro.get(cartGoods.getGoodsId()) > 0) {
cartGoods.setAmount(cartGoods.getAmount() - map.get(cartGoods.getGoodsId()).getActivityApportionAmount());
mapPro.put(cartGoods.getGoodsId(), mapPro.get(cartGoods.getGoodsId()) - map.get(cartGoods.getGoodsId()).getActivityApportionAmount());
if (apportionGoodsDetailList.stream().filter(goodsDetail -> StringUtils.isBlank(goodsDetail.getCartGoodsUid())).collect(Collectors.toList()).isEmpty()) {
// 若促销返回优惠信息均包含购物车行ID,则按行ID进行优惠均摊
List<String> cartGoodsUidList = apportionGoodsDetailList.stream().map(ApportionGoodsDetail::getCartGoodsUid).collect(Collectors.toList());
List<CartGoods> list = cartGoodsList.stream().filter(cartGoods -> cartGoodsUidList.contains(cartGoods.getCartGoodsUid())).collect(Collectors.toList());
Map<String, ApportionGoodsDetail> map = apportionGoodsDetailList.stream().collect(Collectors.toMap(ApportionGoodsDetail::getCartGoodsUid, detail -> detail));
Map<String, Long> mapPro = apportionGoodsDetailList.stream().collect(Collectors.toMap(ApportionGoodsDetail::getCartGoodsUid, detail -> detail.getActivityApportionAmount()));
if (!CollectionUtils.isEmpty(list)) {
for (CartGoods cartGoods : list) {
if (mapPro.get(cartGoods.getCartGoodsUid()) > 0) {
cartGoods.setAmount(cartGoods.getAmount() - map.get(cartGoods.getCartGoodsUid()).getActivityApportionAmount());
mapPro.put(cartGoods.getCartGoodsUid(), mapPro.get(cartGoods.getCartGoodsUid()) - map.get(cartGoods.getCartGoodsUid()).getActivityApportionAmount());
}
}
}
} else {
// 原算价逻辑,根据购物车商品ID进行优惠均摊
List<String> goodIdsList = apportionGoodsDetailList.stream().map(ApportionGoodsDetail::getGoodsId).collect(Collectors.toList());
List<CartGoods> list = cartGoodsList.stream().filter(cartGoods -> goodIdsList.contains(cartGoods.getGoodsId())).collect(Collectors.toList());
Map<String, ApportionGoodsDetail> map = apportionGoodsDetailList.stream().collect(Collectors.toMap(ApportionGoodsDetail::getGoodsId, detail -> detail));
Map<String, Long> mapPro = apportionGoodsDetailList.stream().collect(Collectors.toMap(ApportionGoodsDetail::getGoodsId, detail -> detail.getActivityApportionAmount()));
if (!CollectionUtils.isEmpty(list)) {
for (CartGoods cartGoods : list) {
if (mapPro.get(cartGoods.getGoodsId()) > 0) {
cartGoods.setAmount(cartGoods.getAmount() - map.get(cartGoods.getGoodsId()).getActivityApportionAmount());
mapPro.put(cartGoods.getGoodsId(), mapPro.get(cartGoods.getGoodsId()) - map.get(cartGoods.getGoodsId()).getActivityApportionAmount());
}
}
}
}
......@@ -72,6 +90,7 @@ public class TwoNDiscountServiceImpl implements IPromotionService {
apportionGoodsDetail.setActivityCode(apportionDetail.getActivityCode());
apportionGoodsDetail.setActivityName(apportionDetail.getActivityName());
apportionGoodsDetail.setGoodsId(apportionGood.getGoodsId());
apportionGoodsDetail.setCartGoodsUid(apportionGood.getCartGoodsUid());
list.add(apportionGoodsDetail);
}
}
......@@ -96,5 +115,9 @@ public class TwoNDiscountServiceImpl implements IPromotionService {
*/
private Long activityApportionAmount;
private String goodsId;
/**
* 购物车行记录
*/
private String cartGoodsUid;
}
}
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