Commit 1e10653b by ping.wu

买m赠n券

parent 12c89263
...@@ -1357,4 +1357,176 @@ public class CouponServiceImpl implements CouponService { ...@@ -1357,4 +1357,176 @@ public class CouponServiceImpl implements CouponService {
} }
} }
} }
// @Override
public CheckSpqInfoResponseDto checkSpqInfo(CheckSpqInfoRequestDto requestDto, String goodsId,Integer goodsType) {
String partnerId = requestDto.getPartnerId();
String couponCode = requestDto.getCouponCode();
String storeId = requestDto.getStoreId();
//TODO 查询券详情券是否存在
GetMemberCouponRequestVo requestVo = new GetMemberCouponRequestVo();
requestVo.setPartnerId(partnerId);
requestVo.setCouponCode(couponCode);
requestVo.setStoreId(requestDto.getStoreId());
GetCouponDetailResponseDto couponDetailResponseDto = couponService.getMemberCoupon(requestVo);
if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
GetCouponDetailResponseDto.Details details = couponDetailResponseDto.getDetails().get(0);
//校验商品券是否可用
if (!Objects.equals(details.getStatus(), CouponStatus.STATUS_0.getCode())
&& !Objects.equals(details.getStatus(), CouponStatus.STATUS_2.getCode())) {
return null;
}
List<String> couPonstoreIds = Lists.newArrayList();
//TODO 判断该券是否在这个门店下(一个券可以在多个门店下使用)
if (CollectionUtils.isNotEmpty(details.getActiveRestrictionVOS())) {
details.getActiveRestrictionVOS().forEach(activeRestrictionVOS -> {
couPonstoreIds.add(activeRestrictionVOS.getStoreIdPartner());
});
}
if (CollectionUtils.isNotEmpty(couPonstoreIds) && !couPonstoreIds.contains(storeId)) {
return null;
}
//券返回的商品id
List<String> skuIds = Lists.newArrayList();
String skuId = details.getActiveProduct().get(0).getProductIdPartner();
skuIds.add(String.valueOf(skuId));
//TODO 通过skuid查询spuid
Map<String, GetProductsVo> productsVoMap = itemService.getProducts(skuIds, partnerId, storeId , requestDto.getMenuType());
GetProductsVo productsVo = productsVoMap.get(skuId);
if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) {
return null;
}
// 校验券的可用时间
List<GetCouponDetailResponseDto.ActiveRedeemTimeInterval> activeRedeemTimeIntervalList = details.getActiveRedeemTimeIntervalList();
boolean verificationPassed = checkCouonRedeemTime(activeRedeemTimeIntervalList);
if (!verificationPassed){
return null;
}
// 校验商品可用时间
ValidateShopProductRequest request = getValidateShopProductRequest(productsVo, requestDto);
ProductResponseDTO<ValiadShopProductResponse> valiadProductResponse = storeItemClient.validateShopProduct(request);
if (null == valiadProductResponse || !Objects.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, valiadProductResponse.getErrcode())
|| valiadProductResponse.getData() == null || CollectionUtils.isEmpty(valiadProductResponse.getData().getSuccessList())) {
return null;
}
// CheckSpqInfoResponseDto dto = new CheckSpqInfoResponseDto();
// dto.setCouponCode(couponCode);
// dto.setActiveCode(details.getActive().getActiveCode());
// dto.setCouponName(details.getTitle());
// dto.setActivityName(details.getActive().getActiveName());
// if (details.getActive().getMaxRedeemTimes() != null && details.getActive().getMaxRedeemTimes() > 1){
// if (details.getToday_available_times() != null){
// dto.setTodayAvailableTimes(details.getToday_available_times());
// } else {
// dto.setTodayAvailableTimes(1);
// }
// } else {
// dto.setTodayAvailableTimes(1);
// }
// dto.setPrice(productsVo.getFinalPrice());
// dto.setSpuId(productsVo.getSpuId());
// dto.setSpuName(productsVo.getSkuName());
// dto.setStockLimit(ObjectUtils.equals(1, productsVo.getStockLimit()));
// dto.setSkuId(productsVo.getSkuId());
// dto.setSkuName(StringUtils.isNotBlank(productsVo.getSkuName()) ? productsVo.getSkuName() : productsVo.getSpuName());
// dto.setPicture(productsVo.getSpuPicture());
// dto.setCouponType(0);
// return dto;
boolean productValid = false;
Integer couponType = 0;
for (GetCouponDetailResponseDto.Details detail : couponDetailResponseDto.getDetails()) {
if (productValid) break;
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus()) && !CouponStatus.STATUS_2.getCode().equals(detail.getStatus())) continue;
for (GetCouponDetailResponseDto.ActiveProduct activeProduct : detail.getActiveProduct()) {
if (goodsId.equals(activeProduct.getProductIdPartner())) {
productValid = true;
couponType = CouponTypeEnum.TYPE_4.getCode();
break;
}
}
if(CouponTypeEnum.TYPE_7.getCode().equals(detail.getType())){
for (GetCouponDetailResponseDto.ActiveProduct activeProduct : detail.getActiveProduct()) {
if (goodsId.equals(activeProduct.getProductIdPartner())) {
productValid = true;
couponType = CouponTypeEnum.TYPE_7.getCode();
break;
}
}
}
}
//检查商品是否有效
if (!productValid) {
return null;
}
//判断该券是否在这个门店下(一个券可以在多个门店下使用)
List<String> couponStoreIds = Lists.newArrayList();
for (GetCouponDetailResponseDto.Details detail : couponDetailResponseDto.getDetails()) {
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus()) && !CouponStatus.STATUS_2.getCode().equals(detail.getStatus())) continue;
for (GetCouponDetailResponseDto.ActiveRestrictionVOS activeRestrictionVO : detail.getActiveRestrictionVOS()) {
couponStoreIds.add(activeRestrictionVO.getStoreIdPartner());
}
}
if (CollectionUtils.isNotEmpty(couponStoreIds) && !couponStoreIds.contains(storeId)) {
return null;
}
//券返回的商品id
// List<String> skuIds = Lists.newArrayList();
// String skuId = goodsId;
// skuIds.add(skuId);
//通过skuid查询spuid
// Map<String, GetProductsVo> productsVoMap = itemService.getProducts(skuIds, partnerId, storeId, requestDto.getMenuType());
// GetProductsVo productsVo = productsVoMap.get(skuId);
// if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) {
// return null;
// }
// 校验券的可用时间
// List<GetCouponDetailResponseDto.ActiveRedeemTimeInterval> activeRedeemTimeIntervalList = couponDetailResponseDto.getDetails().get(0).getActiveRedeemTimeIntervalList();
// boolean verificationPassed = checkCouonRedeemTime(activeRedeemTimeIntervalList);
// if (!verificationPassed){
// return null;
// }
// 校验商品可用时间
// ValidateShopProductRequest request = getValidateShopProductRequest(productsVo, requestDto);
// ProductResponseDTO<ValiadShopProductResponse> valiadProductResponse = storeItemClient.validateShopProduct(request);
// if (null == valiadProductResponse || !Objects.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, valiadProductResponse.getErrcode())
// || valiadProductResponse.getData() == null || CollectionUtils.isEmpty(valiadProductResponse.getData().getSuccessList())) {
// return null;
// }
CheckSpqInfoResponseDto dto = new CheckSpqInfoResponseDto();
if (details.getActive().getMaxRedeemTimes() != null && details.getActive().getMaxRedeemTimes() > 1){
if (details.getToday_available_times() != null){
dto.setTodayAvailableTimes(details.getToday_available_times());
} else {
dto.setTodayAvailableTimes(1);
}
} else {
dto.setTodayAvailableTimes(1);
}
dto.setCouponCode(couponCode);
dto.setActiveCode(details.getActive().getActiveCode());
dto.setCouponName(details.getTitle());
dto.setActivityName(details.getActive().getActiveName());
dto.setPrice(productsVo.getFinalPrice());
dto.setSpuId(productsVo.getSpuId());
dto.setSpuName(productsVo.getSkuName());
dto.setSkuId(productsVo.getSkuId());
dto.setSkuName(StringUtils.isNotBlank(productsVo.getSkuName()) ? productsVo.getSkuName() : productsVo.getSpuName());
dto.setPicture(productsVo.getSpuPicture());
dto.setDefaultSpecName(productsVo.getDefaultSpecName());
dto.setDefaultSpecId(productsVo.getDefaultSpecId());
dto.setStockLimit(ObjectUtils.equals(1, productsVo.getStockLimit()));
dto.setExtras(productsVo.getExtra());
dto.setCouponType(couponType);
return dto;
}
} }
...@@ -1398,23 +1398,31 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1398,23 +1398,31 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
HashMap<String, List<String>> spqIdToCartUuid = new HashMap<>(16); HashMap<String, List<String>> spqIdToCartUuid = new HashMap<>(16);
for (int i = cartGoodsList.size() - 1; i >= 0; i--) { for (int i = cartGoodsList.size() - 1; i >= 0; i--) {
CartGoods cartGoods = cartGoodsList.get(i); CartGoods cartGoods = cartGoodsList.get(i);
//套餐商品的固定和可选商品必有一个
if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
if (CollectionUtils.isEmpty(cartGoods.getProductGroupList()) && CollectionUtils.isEmpty(cartGoods.getProductComboList())) {
cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL);
}
}
String cartGoodsUid = cartGoods.getCartGoodsUid(); String cartGoodsUid = cartGoods.getCartGoodsUid();
String couponCode = "";
if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) {
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
} else {
couponCode = cartGoods.getCouponCode();
}
// 商品不是商品券 // 商品不是商品券
if (StringUtils.isBlank(cartGoods.getCouponCode()) && !cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) { if (StringUtils.isBlank(couponCode)) {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, cartGoods); this.addCalculationDiscountGoods(calculationDiscountGoodsList, cartGoods);
} } else {
// 商品是商品券
else {
// 商品券ID换取商品
String couponCode = "";
if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) {
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
} else {
couponCode = cartGoods.getCouponCode();
}
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType); CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CheckSpqInfoResponseDto checkSpqInfoResponseDto = null; CheckSpqInfoResponseDto checkSpqInfoResponseDto = null;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) { if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())
|| GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId()); checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
} else { } else {
checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto); checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto);
...@@ -1423,54 +1431,42 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1423,54 +1431,42 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
if (checkSpqInfoResponseDto == null) { if (checkSpqInfoResponseDto == null) {
cartGoodsList.remove(i); cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService); assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
} else { continue;
if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) { }
validCouponMap.put(couponCode, checkSpqInfoResponseDto); if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) {
} else { validCouponMap.put(couponCode, checkSpqInfoResponseDto);
validCouponMap.put(couponCode + checkSpqInfoResponseDto.getSkuId(), checkSpqInfoResponseDto); }if (!GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
} validCouponMap.put(couponCode + checkSpqInfoResponseDto.getSkuId(), checkSpqInfoResponseDto);
if (spqIdToCartUuid.containsKey(couponCode)) {
List<String> uuidList = spqIdToCartUuid.get(couponCode);
uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList);
} else {
List<String> uuidList = new ArrayList<>();
uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList);
}
validCouponMap.put(couponCode, checkSpqInfoResponseDto); validCouponMap.put(couponCode, checkSpqInfoResponseDto);
cartGoods.setName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit());
// 添加请求的优惠券信息
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(checkSpqInfoResponseDto.getCouponCode());
coupon.setActivityCode(checkSpqInfoResponseDto.getActiveCode());
coupons.add(coupon);
// 添加商品券代表的商品
// 换购券传给促销要带code
String goodsId = StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId();
List<Integer> integers = Arrays.asList(GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType(), GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType());
if (integers.contains(cartGoods.getGoodsType())) {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, cartGoods.getQty(), checkSpqInfoResponseDto.getPrice(), 100, cartGoodsUid, couponCode);
} else {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, cartGoods.getQty(), checkSpqInfoResponseDto.getPrice(), 100, cartGoodsUid);
}
} }
} if (spqIdToCartUuid.containsKey(couponCode)) {
List<String> uuidList = spqIdToCartUuid.get(couponCode);
if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) { uuidList.add(cartGoods.getCartGoodsUid());
if (CollectionUtils.isEmpty(cartGoods.getProductGroupList()) && CollectionUtils.isEmpty(cartGoods.getProductComboList())) { spqIdToCartUuid.put(couponCode, uuidList);
cartGoodsList.remove(i); } else {
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService); List<String> uuidList = new ArrayList<>();
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL); uuidList.add(cartGoods.getCartGoodsUid());
spqIdToCartUuid.put(couponCode, uuidList);
} }
cartGoods.setName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit());
// 添加请求的优惠券信息
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(checkSpqInfoResponseDto.getCouponCode());
coupon.setActivityCode(checkSpqInfoResponseDto.getActiveCode());
coupons.add(coupon);
// 添加商品券代表的商品
// 换购券传给促销要带code
String goodsId = StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId();
this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, cartGoods.getQty(), checkSpqInfoResponseDto.getPrice(), 100, cartGoodsUid, couponCode);
} }
} }
// 当加价购商品不为空时 // 当加价购商品不为空时
if (CollectionUtils.isNotEmpty(sendGoodsList)) { if (CollectionUtils.isNotEmpty(sendGoodsList)) {
for (ShoppingCartInfoRequestVo.SendGoods sendGoods : sendGoodsList) { for (ShoppingCartInfoRequestVo.SendGoods sendGoods : sendGoodsList) {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, sendGoods.getGoodsId(), sendGoods.getQty(), sendGoods.getOriginalPrice(), 100, ""); this.addCalculationDiscountGoods(calculationDiscountGoodsList, sendGoods.getGoodsId(), sendGoods.getQty(), sendGoods.getOriginalPrice(), 100, "",null);
} }
} }
calculationDiscountGoodsList.removeIf(calculationDiscountGoods -> (calculationDiscountGoods.getGoodsQuantity().equals(0))); calculationDiscountGoodsList.removeIf(calculationDiscountGoods -> (calculationDiscountGoods.getGoodsQuantity().equals(0)));
...@@ -1550,16 +1546,16 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1550,16 +1546,16 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
* @param goodsQuantity * @param goodsQuantity
* @param originalPrice * @param originalPrice
*/ */
private void addCalculationDiscountGoods(List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList, // private void addCalculationDiscountGoods(List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList,
String goodsId, Integer goodsQuantity, Long originalPrice, Integer memberDiscount, String cartGoodsUid) { // String goodsId, Integer goodsQuantity, Long originalPrice, Integer memberDiscount, String cartGoodsUid) {
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods(); // ActivityCalculationDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods();
calculationDiscountGoods.setGoodsId(goodsId); // calculationDiscountGoods.setGoodsId(goodsId);
calculationDiscountGoods.setCartGoodsUid(cartGoodsUid); // calculationDiscountGoods.setCartGoodsUid(cartGoodsUid);
calculationDiscountGoods.setGoodsQuantity(goodsQuantity); // calculationDiscountGoods.setGoodsQuantity(goodsQuantity);
calculationDiscountGoods.setOriginalPrice(originalPrice); // calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(memberDiscount); // calculationDiscountGoods.setMemberDiscount(memberDiscount);
this.addCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods); // this.addCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods);
} // }
private void addCalculationDiscountGoods(List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList private void addCalculationDiscountGoods(List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
, String goodsId , String goodsId
...@@ -2039,8 +2035,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -2039,8 +2035,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
// 商品券Id // 商品券Id
String spqId = spuId.substring(CommonsConstant.COUPON_PREFIX.length()); String spqId = spuId.substring(CommonsConstant.COUPON_PREFIX.length());
if (CollectionUtils.isNotEmpty(allCartGoodsList)) { if (CollectionUtils.isNotEmpty(allCartGoodsList)) {
if(Objects.equals(CouponTypeEnum.TYPE_0.getCode(),couponProductDto.getType()) if (Objects.equals(CouponTypeEnum.TYPE_0.getCode(), couponProductDto.getType())
|| Objects.equals(CouponTypeEnum.TYPE_4.getCode(),couponProductDto.getType())){ || Objects.equals(CouponTypeEnum.TYPE_4.getCode(), couponProductDto.getType())) {
int sum = allCartGoodsList.stream().filter(p -> p.getSpuId().equals(spqId)).mapToInt(CartGoods::getQty).sum(); int sum = allCartGoodsList.stream().filter(p -> p.getSpuId().equals(spqId)).mapToInt(CartGoods::getQty).sum();
if (sum + cartGoods.getQty() > todayAvailableTimes) { if (sum + cartGoods.getQty() > todayAvailableTimes) {
throw new ServiceException(ResponseResult.SHOPPING_CART_GOODS_COUPON_CAN_NOT_USE); throw new ServiceException(ResponseResult.SHOPPING_CART_GOODS_COUPON_CAN_NOT_USE);
......
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