Commit 92f25048 by ping.wu

Merge branches 'feature/20210816_买M赠N券_wuping' and 'master' of…

Merge branches 'feature/20210816_买M赠N券_wuping' and 'master' of http://gitlab.freemud.com/order-group-application/order-group

# Conflicts:
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/calculate/CalculationSharingDiscountService.java
parents 5d85b30c 2299a71b
......@@ -3860,6 +3860,7 @@ public class OrderSdkAdapter {
couponCodeVerificationProductDto.setPid(pid);
couponCodeVerificationProductDto.setConsume_num(productDiscount.getDiscountQty());
couponCodeVerificationProductDto.setSeq(i + 1);
couponCodeVerificationProductDto.setRedeem_price(new BigDecimal(productBean.getPrice()));
products.add(couponCodeVerificationProductDto);
}
}
......
......@@ -21,6 +21,11 @@ public enum GoodsTypeEnum {
SET_MEAL_GOODS(3, "套餐商品"),
SKU_GOODS(4, "sku商品"),
SPU_GOODS(5, "spu商品"),
REDUCE_PRICE_GOODS(6,"超值加购商品"),
ALL_COUPON_GOODS(8, "万能券商品"),
VIRTUAL_GOODS(9,"虚拟商品"),
BUY_M_SEND_N_COUPON(10, "买M送N券"),
MATERIAL(88, "有加料的商品"),
EXCEPTION_GOODS(99, "异常商品:商品菜单变化导致和购物车不商品匹配");
private Integer goodsType;
......
......@@ -232,7 +232,9 @@ public interface ShoppingCartBaseService {
CartGoodsStates cartGoodsStates = new CartGoodsStates();
for (CartGoods cartGoods : checkCartRequest.getCartGoodsList()) {
// 当goodsId为空或商品是商品券时直接跳过
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType())) {
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType())) {
continue;
}
shoppingCartAdapter.updateCartGoodsInfoNew(cartGoods, productList);
......
......@@ -920,7 +920,8 @@ public class CreateOrderAdapter {
.accountType(getQueryOrderAccountType(getOrderAccountType(activityDiscountsDto.getActivityType())))
.sequence(createOrderProductDto.getSequence())
.productId(material.getSpuId())
.discountQty(createOrderProductDto.getNumber())
.discountQty((activityDiscountsDto.getActualActivityGoodsNumber() == null || activityDiscountsDto.getActualActivityGoodsNumber() == 0)
? createOrderProductDto.getNumber() : activityDiscountsDto.getActualActivityGoodsNumber())
.build();
orderAccountDtos.add(createOrderAccountDto);
}
......
......@@ -464,7 +464,8 @@ public class OrderAdapter {
.accountType(getQueryOrderAccountType(getOrderAccountType(activityDiscountsDto.getActivityType())))
.sequence(createOrderProductDto.getSequence())
.productId(createOrderProductDto.getSpecification())
.discountQty(createOrderProductDto.getNumber())
.discountQty((activityDiscountsDto.getActualActivityGoodsNumber() == null || activityDiscountsDto.getActualActivityGoodsNumber() == 0)
? createOrderProductDto.getNumber() : activityDiscountsDto.getActualActivityGoodsNumber())
.build();
orderAccountDtos.add(createOrderAccountDto);
}
......
......@@ -50,6 +50,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
......@@ -148,6 +149,7 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
couponCodeVerificationProductDto.setPID(pid);
couponCodeVerificationProductDto.setConsume_num(productDiscount.getDiscountQty());
couponCodeVerificationProductDto.setSeq(i + 1);
couponCodeVerificationProductDto.setRedeem_price(new BigDecimal(productBean.getPrice()));
products.add(couponCodeVerificationProductDto);
}
}
......
......@@ -358,7 +358,8 @@ public class ActivityAdapter {
List<String> couponCodes = discountResult.getDiscounts().stream().filter(discount -> Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_3.getCode())
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_31.getCode())
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_33.getCode())).map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount::getActivityCode).collect(Collectors.toList());
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_33.getCode())
|| Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_330.getCode())).map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount::getActivityCode).collect(Collectors.toList());
couponAvailableCartInfo.setCouponCodes(couponCodes);
totalMealDiscountAmount = discountResult.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount::getDiscount).sum();
......@@ -380,8 +381,11 @@ public class ActivityAdapter {
Long mealDiscountAmount = 0L;//套餐优惠不算在内
if(CollectionUtils.isNotEmpty(discountGood.getDiscounts())){
Optional<String> goodCoupon = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_33.getCode())).map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActivityCode).findFirst();
Optional<String> goodCoupon = discountGood.getDiscounts().stream().filter(
goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_33.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_330.getCode())
).map(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActivityCode).findFirst();
cartProduct.setCouponCode(goodCoupon!=null && goodCoupon.isPresent()?goodCoupon.get():null);
mealDiscountAmount = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getDiscount).sum();
......@@ -424,7 +428,8 @@ public class ActivityAdapter {
List<String> couponCodes = discountResult.getCouponDiscounts().stream().filter(discount -> Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_3.getCode())
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_31.getCode())
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_33.getCode())).map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults::getCouponCode).collect(Collectors.toList());
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_33.getCode())
|| Objects.equals(discount.getActivityType(),ActivityTypeEnum.TYPE_330.getCode())).map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults::getCouponCode).collect(Collectors.toList());
couponAvailableCartInfo.setCouponCodes(couponCodes);
totalMealDiscountAmount = discountResult.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount::getDiscount).sum();
......@@ -440,8 +445,10 @@ public class ActivityAdapter {
Pair<Long,Long> pair = getSmallMaterialAmount(discountGood.getSmallMaterial());//value1=总实付 value2=总优惠
Long mealDiscountAmount = 0L;//套餐优惠不算在内
if(CollectionUtils.isNotEmpty(discountGood.getDiscounts())){
Optional<String> goodCoupon = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_33.getCode())).map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActivityCode).findFirst();
Optional<String> goodCoupon = discountGood.getDiscounts().stream().filter(
goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_32.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_33.getCode())
|| Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_330.getCode())).map(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActivityCode).findFirst();
cartProduct.setCouponCode(goodCoupon!=null && goodCoupon.isPresent()?goodCoupon.get():null);
mealDiscountAmount = discountGood.getDiscounts().stream().filter(goodsDiscount -> Objects.equals(goodsDiscount.getType(),ActivityTypeEnum.TYPE_310.getCode())).mapToLong(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getDiscount).sum();
......
......@@ -36,6 +36,7 @@ public enum ActivityTypeEnum {
TYPE_31(31, "折扣券"),
TYPE_32(32, "商品券"),
TYPE_33(33, "换购券"),
TYPE_330(330, "买M赠N券"),
TYPE_34(34, "配送券"),
TYPE_37(37, "月享卡种子券"),
TYPE_35(35, "买3赠1券"),
......
......@@ -6,7 +6,8 @@ public enum CouponTypeEnum {
TYPE_1(1, "代金券"),
TYPE_3(3, "折扣券"),
TYPE_4(4, "换购券"),
TYPE_5(5, "配送券");
TYPE_5(5, "配送券"),
TYPE_7(7, "买M赠N券");
private Integer code;
......
......@@ -24,6 +24,7 @@ public enum GoodsTypeEnum {
REDUCE_PRICE_GOODS(6,"超值加购商品"),
ALL_COUPON_GOODS(8, "万能券商品"),
VIRTUAL_GOODS(9,"虚拟商品"),
BUY_M_SEND_N_COUPON(10, "买M送N券"),
MATERIAL(88, "有加料的商品"),
EXCEPTION_GOODS(99, "异常商品:商品菜单变化导致和购物车不商品匹配");
private Integer goodsType;
......
......@@ -28,6 +28,7 @@ public enum ShoppingCartPromotionEnum {
Material(12, "MaterialPromotionService"),
// 集点活动类
GATHER_SPOT(13, "gatherSpotPromotionService"),
BUY_M_SEND_N_COUPON(14, "buyMSendNCouponDiscountService"),
MEMBER_DISCOUNT_NEw(27, "memberDiscountService");
private Integer type;
......
......@@ -137,7 +137,7 @@ public interface ShoppingCartNewService {
}
/**
* 换购券
* 换购券 买M赠N券
*
* @param partnerId
* @param storeId
......
package cn.freemud.service.impl;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.IPromotionService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service("buyMSendNCouponDiscountService")
public class BuyMSendNCouponDiscountServiceImpl implements IPromotionService {
@Override
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto,
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult,
List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getCouponDiscounts())) {
return;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults> couponResultsList = calculationDiscountResult.getCouponDiscounts();
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults> collect = couponResultsList.stream().filter(c -> ActivityTypeEnum.TYPE_330.getCode().equals(c.getActivityType())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(collect)) {
return;
}
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods : calculationDiscountResult.getGoods()) {
if (CollectionUtils.isEmpty(goods.getDiscounts())) {
continue;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> goodsDiscounts = goods.getDiscounts().stream().filter(c -> ActivityTypeEnum.TYPE_330.getCode().equals(c.getType())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(goodsDiscounts)) {
continue;
}
// List<CartGoods> addSendGoodsList = new ArrayList<>();
for (CartGoods cartGoods : cartGoodsList) {
if (Objects.equals(goods.getCartGoodsUid(), cartGoods.getCartGoodsUid())) {
Integer actualGoodsNumber = goodsDiscounts.get(0).getActualGoodsNumber();
if (cartGoods.getQty() > actualGoodsNumber) {
// CartGoods cartGood = new CartGoods();
// BeanUtils.copyProperties(cartGoods, cartGood);
// cartGood.setQty(actualGoodsNumber);
// cartGood.setAmount(0L);
// cartGoods.setQty(cartGoods.getQty() - actualGoodsNumber);
cartGoods.setAmount(goods.getRealAmount());
// addSendGoodsList.add(cartGood);
}
if (cartGoods.getQty() == actualGoodsNumber) {
cartGoods.setAmount(0L);
}
}
}
// cartGoodsList.addAll(addSendGoodsList);
}
}
@Override
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult,
ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity,
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
}
}
......@@ -98,7 +98,8 @@ public class CouponPromotionService implements IPromotionService {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults couponResults : couponResultsList) {
//前端计算小计拿商品现价累计减couponDiscount,商品券换购券现价已排除
if(ActivityTypeEnum.TYPE_33.getCode()== couponResults.getActivityType()
|| ActivityTypeEnum.TYPE_32.getCode()== couponResults.getActivityType()){
|| ActivityTypeEnum.TYPE_32.getCode()== couponResults.getActivityType()
|| Objects.equals(ActivityTypeEnum.TYPE_330.getCode(), couponResults.getActivityType())){
continue;
}
couponDiscount = couponDiscount + (couponResults.getDiscountAmount() == null ? 0 : couponResults.getDiscountAmount());
......@@ -218,15 +219,21 @@ public class CouponPromotionService implements IPromotionService {
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods : shoppingCartGoodsDto.getProducts()) {
if (StringUtils.isNotEmpty(cartGoods.getCouponCode())) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults couponDiscount : couponDiscounts) {
ActivityDiscountsDto activityDiscountsDto = getActivityDiscountDto(calculationDiscountResult.getApportionGoods(), couponDiscount);
if (activityDiscountsDto != null) {
ActivityDiscountsDto activityDiscountsDto1 = new ActivityDiscountsDto();
BeanUtils.copyProperties(activityDiscountsDto, activityDiscountsDto1);
activityDiscountsDto1.setDiscountAmount(-activityDiscountsDto.getDiscountAmount());
if(Objects.equals(couponDiscount.getActivityType(),ActivityTypeEnum.TYPE_330.getCode())){
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> collect = calculationDiscountResult.getGoods().stream().filter(goods -> Objects.equals(cartGoods.getCartGoodsUid(), goods.getCartGoodsUid())).collect(Collectors.toList());
//商品优惠赋值
getActivityDiscountDto2(collect,cartGoods);
}else {
ActivityDiscountsDto activityDiscountsDto = getActivityDiscountDto(calculationDiscountResult.getApportionGoods(), couponDiscount);
if (activityDiscountsDto != null) {
ActivityDiscountsDto activityDiscountsDto1 = new ActivityDiscountsDto();
BeanUtils.copyProperties(activityDiscountsDto, activityDiscountsDto1);
activityDiscountsDto1.setDiscountAmount(-activityDiscountsDto.getDiscountAmount());
cartGoods.setTotalDiscountAmount(-activityDiscountsDto.getDiscountAmount());
cartGoods.setSalePrice(0L);
cartGoods.setActivityDiscountsDtos(Arrays.asList(activityDiscountsDto1));
cartGoods.setTotalDiscountAmount(-activityDiscountsDto.getDiscountAmount());
cartGoods.setSalePrice(0L);
cartGoods.setActivityDiscountsDtos(Arrays.asList(activityDiscountsDto1));
}
}
}
}
......@@ -269,6 +276,30 @@ public class CouponPromotionService implements IPromotionService {
return null;
}
private ActivityDiscountsDto getActivityDiscountDto2(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goods, ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods) {
if(CollectionUtils.isNotEmpty(goods)){
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods1 = goods.get(0);
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> discounts = goods1.getDiscounts();
if(CollectionUtils.isNotEmpty(discounts) && Objects.equals(discounts.get(0).getType(),ActivityTypeEnum.TYPE_330.getCode())){
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
activityDiscountsDto.setActivityCode(discounts.get(0).getActivityCode());
activityDiscountsDto.setActivityName(discounts.get(0).getActivityName());
activityDiscountsDto.setActivityType(this.convent2ActivityType(discounts.get(0).getType()));
activityDiscountsDto.setDiscountAmount(0 - discounts.get(0).getDiscount().intValue());
activityDiscountsDto.setActualActivityGoodsNumber(discounts.get(0).getActualGoodsNumber());
activityDiscountsDto.setCartGoodsUid(goods1.getCartGoodsUid());
//商品优惠赋值
cartGoods.setTotalDiscountAmount(-goods1.getDiscountAmount().intValue());
cartGoods.setSalePrice(goods1.getNowPrice());
cartGoods.setActivityDiscountsDtos(Arrays.asList(activityDiscountsDto));
return activityDiscountsDto;
}
}
return null;
}
public ActivityClassifyCouponBean createEmptyActivityCouponBean() {
ActivityClassifyCouponBean activityClassifyCouponBean = new ActivityClassifyCouponBean();
......@@ -285,6 +316,10 @@ public class CouponPromotionService implements IPromotionService {
if (type != null && Hg.equals(type)) {
type = 32;
}
Integer buyMsendN = 330;
if (type != null && buyMsendN.equals(type)) {
type = 32;
}
return type;
}
}
......@@ -924,6 +924,16 @@ public class CouponServiceImpl implements CouponService {
break;
}
}
if(CouponTypeEnum.TYPE_7.getCode().equals(detail.getType())){
for (GetCouponDetailResponseDto.ActiveProduct activeProduct : detail.getActiveProduct()) {
if (goodsId.equals(activeProduct.getProductIdPartner())) {
productValid = true;
couponActivityDetail = detail;
couponType = CouponTypeEnum.TYPE_7.getCode();
break;
}
}
}
}
//检查商品是否有效
if (!productValid) {
......@@ -1347,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;
}
}
......@@ -278,9 +278,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
*/
@Override
public BaseResponse addGoods(AddShoppingCartGoodsRequestVo addShoppingCartGoodsRequestVo) {
if (StringUtils.isEmpty(addShoppingCartGoodsRequestVo.getShopId())){
if (StringUtils.isEmpty(addShoppingCartGoodsRequestVo.getShopId())) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_SHOP_ID_NOT_EMPTY);
// throw new ServiceException(ResponseResult.SHOPPING_CART_SHOP_ID_NOT_EMPTY);
}
ShoppingCartConvertAdapter.convent2SkuId(addShoppingCartGoodsRequestVo);
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = new ShoppingCartGoodsResponseVo();
......@@ -330,18 +329,15 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
// 获取商品详细信息
List<ProductBean> productBeanListSpuClass = assortmentSdkService.getProductsInfo(partnerId, storeId
, Collections.singletonList(spuId2), addShoppingCartGoodsRequestVo.getMenuType(), this.shoppingCartBaseService);
// LogUtil.info("productBeanListSpuClass", spuId2,JSON.toJSONString(productBeanListSpuClass));
// 没有查到商品
if (productBeanListSpuClass == null || productBeanListSpuClass.isEmpty()) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_PRODUCT_NOT_EXIST);
// throw new ServiceException(ResponseResult.SHOPPING_CART_PRODUCT_NOT_EXIST);
}
// 检查商品小料数量
if (checkMaterialQty(addShoppingCartGoodsRequestVo, productBeanListSpuClass)) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_MATERIA_QTY_LIMIT_ERR);
// throw new ServiceException(ResponseResult.SHOPPING_CART_MATERIA_QTY_LIMIT_ERR);
}
//缓存中获取购物车商品信息
......@@ -354,7 +350,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
Integer checkQty = this.checkSkuQty(allCartGoodsList, cartGoods);
//购物车添加数量限制
Integer productsCount = limitGoodsQty(allCartGoodsList, cartGoods, appId,partnerId);
Integer productsCount = limitGoodsQty(allCartGoodsList, cartGoods, appId, partnerId);
//查询多个商品库存信息 TODO
queryManyGoodsStocks(addShoppingCartGoodsRequestVo, productIds, productBeanListSpuClass, skuId, checkQty);
String productName = null;
......@@ -740,7 +736,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, shoppingCartInfoRequestVo.getFlag()
, userId
, storeId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,calculationSharingDiscountResult,shoppingCartInfoRequestVo.getFlag(),partnerId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo, calculationSharingDiscountResult, shoppingCartInfoRequestVo.getFlag(), partnerId);
} else {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
// 当couponCode不为空时,需参与价格计算
......@@ -1222,7 +1218,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
// if (activityClassifyCouponBean != null && CollectionUtils.isNotEmpty(activityClassifyCouponBean.getUsableCoupons())) {
// List<GetMemberInfoResponseVo.Coupon> coupons = activityClassifyCouponBean.getUsableCoupons().stream().map(each -> convert2MemberCoupon(each)).collect(toList());
// , memberId, request.getStoreId(), new CouponPromotionVO(), false, request.getOrderType(), 0,"","", "");
if (activityClassifyCouponBean != null && CollectionUtils.isNotEmpty(activityClassifyCouponBean.getUsableCoupons())){
if (activityClassifyCouponBean != null && CollectionUtils.isNotEmpty(activityClassifyCouponBean.getUsableCoupons())) {
List<GetMemberInfoResponseVo.Coupon> coupons = activityClassifyCouponBean.getUsableCoupons().stream().map(this::convert2MemberCoupon).collect(toList());
responseData.setCoupons(coupons);
}
......@@ -1302,17 +1298,17 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
coupon.setCuoponType(each.getCouponType());
coupon.setCouponName(each.getCouponName());
// 折扣券使用折扣字段
if(Objects.equals(each.getCouponType(),CouponTypeEnum.TYPE_3.getCode())){
if (Objects.equals(each.getCouponType(), CouponTypeEnum.TYPE_3.getCode())) {
int discountAmount = Integer.parseInt(Optional.ofNullable(each.getDiscountAmount()).orElse("0"));
BigDecimal discount = BigDecimal.ZERO;
// 转换千分比为小数
if (discountAmount != 0){
discount = new BigDecimal(discountAmount).divide(BigDecimal.valueOf(100),1,BigDecimal.ROUND_DOWN);
if (discountAmount != 0) {
discount = new BigDecimal(discountAmount).divide(BigDecimal.valueOf(100), 1, BigDecimal.ROUND_DOWN);
}
coupon.setDiscount(discount);
// 暂时先不上
coupon.setDiscountAmount(0);
}else {
} else {
coupon.setDiscount(BigDecimal.ZERO);
coupon.setDiscountAmount(Integer.valueOf(each.getDiscountAmount()));
}
......@@ -1413,23 +1409,31 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
HashMap<String, List<String>> spqIdToCartUuid = new HashMap<>(16);
for (int i = cartGoodsList.size() - 1; i >= 0; 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,bizType);
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL);
}
}
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);
}
// 商品是商品券
else {
// 商品券ID换取商品
String couponCode = "";
if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) {
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
} else {
couponCode = cartGoods.getCouponCode();
}
} else {
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
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());
} else {
checkSpqInfoResponseDto = couponService.checkSpqInfo(checkSpqInfoRequestDto);
......@@ -1438,53 +1442,51 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
if (checkSpqInfoResponseDto == null) {
cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService,bizType);
} else {
if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) {
validCouponMap.put(couponCode, checkSpqInfoResponseDto);
} else {
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);
}
continue;
}
if (cartGoodsUid.startsWith(CommonsConstant.COUPON_PREFIX)) {
validCouponMap.put(couponCode, checkSpqInfoResponseDto);
cartGoods.setName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit());
// 添加请求的优惠券信息
}if (!GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
validCouponMap.put(couponCode + checkSpqInfoResponseDto.getSkuId(), checkSpqInfoResponseDto);
validCouponMap.put(couponCode, 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);
}
cartGoods.setName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getCouponName());
cartGoods.setStockLimit(checkSpqInfoResponseDto.isStockLimit());
if (GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
cartGoods.setName(checkSpqInfoResponseDto.getSkuName());
cartGoods.setSpuName(checkSpqInfoResponseDto.getSpuName());
}
//添加请求的优惠券信息 买M赠N券,不重复加促销券集合字段
String finalCouponCode = couponCode;
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> collect = coupons.stream().filter(calculationDiscountCoupon -> Objects.equals(calculationDiscountCoupon.getCode(), finalCouponCode)).collect(toList());
if(CollectionUtils.isEmpty(collect)){
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();
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, cartGoods.getQty(), checkSpqInfoResponseDto.getPrice(), 100, cartGoodsUid, cartGoods.getSpuId());
} else {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, goodsId, cartGoods.getQty(), checkSpqInfoResponseDto.getPrice(), 100, cartGoodsUid);
}
}
}
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,bizType);
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL);
}
// 添加商品券代表的商品
// 换购券传给促销要带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)) {
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)));
......@@ -1533,8 +1535,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
throw new ServiceException(ResponseResult.SHOPPING_CART_COUPON_CAN_NOT_USE_THIS_SHOP);
}
// 新增算价失败提示
if (activityCalculationDiscountResponseDto != null && StringUtils.equals(activityCalculationDiscountResponseDto.getStatusCode(), "104")){
throw new ServiceException(ResponseResult.SHOPPING_CART_COUPON_CAN_NOT_USE_THIS_SHOP,activityCalculationDiscountResponseDto.getMsg());
if (activityCalculationDiscountResponseDto != null && StringUtils.equals(activityCalculationDiscountResponseDto.getStatusCode(), "104")) {
throw new ServiceException(ResponseResult.SHOPPING_CART_COUPON_CAN_NOT_USE_THIS_SHOP, activityCalculationDiscountResponseDto.getMsg());
}
throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
}
......@@ -1564,16 +1566,16 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
* @param goodsQuantity
* @param originalPrice
*/
private void addCalculationDiscountGoods(List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList,
String goodsId, Integer goodsQuantity, Long originalPrice, Integer memberDiscount, String cartGoodsUid) {
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods();
calculationDiscountGoods.setGoodsId(goodsId);
calculationDiscountGoods.setCartGoodsUid(cartGoodsUid);
calculationDiscountGoods.setGoodsQuantity(goodsQuantity);
calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(memberDiscount);
this.addCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods);
}
// private void addCalculationDiscountGoods(List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList,
// String goodsId, Integer goodsQuantity, Long originalPrice, Integer memberDiscount, String cartGoodsUid) {
// ActivityCalculationDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods();
// calculationDiscountGoods.setGoodsId(goodsId);
// calculationDiscountGoods.setCartGoodsUid(cartGoodsUid);
// calculationDiscountGoods.setGoodsQuantity(goodsQuantity);
// calculationDiscountGoods.setOriginalPrice(originalPrice);
// calculationDiscountGoods.setMemberDiscount(memberDiscount);
// this.addCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods);
// }
private void addCalculationDiscountGoods(List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
, String goodsId
......@@ -1799,9 +1801,13 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
memberDiscountService.updateShoppingCartGoodsDiscount(couponPromotionVO, activityQueryDto, calculationDiscountResult, cartGoodsList, shoppingCartGoodsResponseVo, userLoginInfoDto, shoppingCartInfoRequestVo);
//促销会员价
MemberDiscountServiceImpl memberDiscountServiceNew=(MemberDiscountServiceImpl) PromotionFactory.getPromotionService(ShoppingCartPromotionEnum.MEMBER_DISCOUNT_NEw);
MemberDiscountServiceImpl memberDiscountServiceNew = (MemberDiscountServiceImpl) PromotionFactory.getPromotionService(ShoppingCartPromotionEnum.MEMBER_DISCOUNT_NEw);
memberDiscountServiceNew.updateShoppingCartGoodsDiscountNew(couponPromotionVO, activityQueryDto, calculationDiscountResult, cartGoodsList, shoppingCartGoodsResponseVo, userLoginInfoDto, shoppingCartInfoRequestVo);
BuyMSendNCouponDiscountServiceImpl buyMSendNCouponDiscountService = (BuyMSendNCouponDiscountServiceImpl) PromotionFactory.getPromotionService(ShoppingCartPromotionEnum.BUY_M_SEND_N_COUPON);
buyMSendNCouponDiscountService.updateShoppingCartGoodsDiscount(couponPromotionVO, activityQueryDto, calculationDiscountResult, cartGoodsList, shoppingCartGoodsResponseVo, userLoginInfoDto, shoppingCartInfoRequestVo);
/**
* 满额减配送费 优选活动 再配送券
*/
......@@ -1992,7 +1998,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(oldAllCartGoodsList, addShoppingCartGoodsRequestVo.getPartnerId(),
addShoppingCartGoodsRequestVo.getShopId(), shoppingCartGoodsResponseVo, addShoppingCartGoodsRequestVo.getOrderType(),
"", addShoppingCartGoodsRequestVo.getMenuType(),shoppingCartBaseService);
"", addShoppingCartGoodsRequestVo.getMenuType(), shoppingCartBaseService);
if (checkCartRequest.getShoppingCartGoodsResponseVo() != null) {
shoppingCartGoodsResponseVo.setToastMsg(checkCartRequest.getShoppingCartGoodsResponseVo().getToastMsg());
......@@ -2033,9 +2039,24 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
private void addProductGoods(AddShoppingCartGoodsRequestVo addShoppingCartGoodsRequestVo
, CartGoods cartGoods, String spuId2, String userId, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, String spuId
, List<CartGoods> allCartGoodsList, List<ProductBean> productBeanListSpuClass, CouponProductDto couponProductDto, String couponCode, Integer todayAvailableTimes) {
cartGoods.setSkuId(spuId2);
cartGoods.setOriginalPrice(0L);
cartGoods.setOriginalAmount(0L);
cartGoods.setAmount(0L);
cartGoods.setPackPrice(productBeanListSpuClass.get(0).getPackPrice().longValue());
cartGoods.setPic(productBeanListSpuClass.get(0).getPicture());
cartGoods.setWeight(productBeanListSpuClass.get(0).getWeight());
cartGoods.setUnit(productBeanListSpuClass.get(0).getUnit());
// 设置商品类型为商品券
if (CouponTypeEnum.TYPE_4.getCode().equals(couponProductDto.getType())) {
cartGoods.setGoodsType(GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType());
} else if (CouponTypeEnum.TYPE_7.getCode().equals(couponProductDto.getType())) {
cartGoods.setGoodsType(GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType());
cartGoods.setOriginalPrice(productBeanListSpuClass.get(0).getOriginalPrice());
cartGoods.setAmount(productBeanListSpuClass.get(0).getFinalPrice());
cartGoods.setSkuName(productBeanListSpuClass.get(0).getName());
} else {
cartGoods.setGoodsType(GoodsTypeEnum.COUPON_GOODS.getGoodsType());
}
......@@ -2046,21 +2067,25 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
// 商品券Id
String spqId = spuId.substring(CommonsConstant.COUPON_PREFIX.length());
cartGoods.setSpuId(spqId);
if (CollectionUtils.isNotEmpty(allCartGoodsList)) {
int sum = allCartGoodsList.stream().filter(p -> p.getSpuId().equals(spqId)).mapToInt(CartGoods::getQty).sum();
if (sum + cartGoods.getQty() > todayAvailableTimes) {
throw new ServiceException(ResponseResult.SHOPPING_CART_GOODS_COUPON_CAN_NOT_USE);
if (Objects.equals(CouponTypeEnum.TYPE_0.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();
//今日可用次数判断
if (sum + cartGoods.getQty() > todayAvailableTimes) {
throw new ServiceException(ResponseResult.SHOPPING_CART_GOODS_COUPON_CAN_NOT_USE);
}
}
// if(Objects.equals(GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType(),couponProductDto.getType()) ){
// int sum = allCartGoodsList.stream().filter(p -> p.getSpuId().equals(spqId)).mapToInt(CartGoods::getQty).sum();
// if (sum + cartGoods.getQty() > todayAvailableTimes) {
// throw new ServiceException(ResponseResult.SHOPPING_CART_GOODS_COUPON_CAN_NOT_USE);
// }
// }
}
cartGoods.setSpuId(spqId);
cartGoods.setSkuId(spuId2);
cartGoods.setOriginalPrice(0L);
cartGoods.setOriginalAmount(0L);
cartGoods.setAmount(0L);
cartGoods.setPackPrice(productBeanListSpuClass.get(0).getPackPrice().longValue());
cartGoods.setPic(productBeanListSpuClass.get(0).getPicture());
cartGoods.setWeight(productBeanListSpuClass.get(0).getWeight());
cartGoods.setUnit(productBeanListSpuClass.get(0).getUnit());
boolean stockLimit = false;
if (productBeanListSpuClass.get(0).getType() == ProductType.NOSPEC.getCode()
&& productBeanListSpuClass.get(0).getStockLimit() == 1) {
......@@ -2075,13 +2100,13 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
cartGoods.setStockLimit(stockLimit);
List<String> goodsIds = allCartGoodsList.parallelStream().map(CartGoods::getGoodsId).collect(Collectors.toList());
boolean hasSpecialGoods = hasSpecialGoods(addShoppingCartGoodsRequestVo.getPartnerId(), addShoppingCartGoodsRequestVo.getShopId(), userId, addShoppingCartGoodsRequestVo.getAppId(), goodsIds, addShoppingCartGoodsRequestVo.getOrderType());
// 如果购物车先加入促销活动的商品,再加入商品券时,toast提示“该商品券与其他活动不同享,购物车中已优惠的商品将恢复原价”
if (hasSpecialGoods) {
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_OTHER_ACTIVITY_WHEN_ADD_GOODS_COUPON);
}
//校验合法性,更新缓存中购物车信息
List<String> goodsIds = allCartGoodsList.parallelStream().map(CartGoods::getGoodsId).collect(Collectors.toList());
boolean hasSpecialGoods = hasSpecialGoods(addShoppingCartGoodsRequestVo.getPartnerId(), addShoppingCartGoodsRequestVo.getShopId(), userId, addShoppingCartGoodsRequestVo.getAppId(), goodsIds, addShoppingCartGoodsRequestVo.getOrderType());
// 如果购物车先加入促销活动的商品,再加入商品券时,toast提示“该商品券与其他活动不同享,购物车中已优惠的商品将恢复原价”
if (hasSpecialGoods) {
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_OTHER_ACTIVITY_WHEN_ADD_GOODS_COUPON);
}
//校验合法性,更新缓存中购物车信息
updateCartGoodsLegal(cartGoods, userId, shoppingCartGoodsResponseVo, addShoppingCartGoodsRequestVo, allCartGoodsList);
}
......@@ -2178,7 +2203,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
//fisherman 【ID1033456】自提根据模板配置计算餐具包装费
Long packAmount = commonFunctionHandle.getPackAmountByStoreConfig(shoppingCartInfoRequestVo, shoppingCartGoodsResponseVo.getNewPackAmount());
shoppingCartGoodsResponseVo.setNewPackAmount(packAmount);
if (Objects.equals(shoppingCartInfoRequestVo.getFlag(), SubmitPageEnum.YES.getCode())){
if (Objects.equals(shoppingCartInfoRequestVo.getFlag(), SubmitPageEnum.YES.getCode())) {
Long originalTotalAmount = shoppingCartGoodsResponseVo.getOriginalTotalAmount() + packAmount;
Long totalAmount = shoppingCartGoodsResponseVo.getTotalAmount() + packAmount;
shoppingCartGoodsResponseVo.setOriginalTotalAmount(originalTotalAmount);
......@@ -2188,7 +2213,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
/**
* 在原价、现价、折扣价上增加第一次使用会员卡的费用
*
......@@ -2510,7 +2534,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
AssortmentCustomerInfoVo customerInfoVo = customerInfoManager.getCustomerInfoByObject(sessionId);
if (customerInfoVo == null) throw new ServiceException(ResponseResult.NOT_LOGIN);
String jsonObject = JSON.toJSONString(customerInfoVo);
CustomerInfoVo customerInfoVo1 = JSON.parseObject(jsonObject,CustomerInfoVo.class);
CustomerInfoVo customerInfoVo1 = JSON.parseObject(jsonObject, CustomerInfoVo.class);
return customerInfoVo1;
}
......@@ -2632,7 +2656,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
if (Objects.nonNull(cartGoods)) {
qty += cartGoods.getQty();
}
int limitCount = queryLimitCount(partnerId,appid);
int limitCount = queryLimitCount(partnerId, appid);
if (limitCount != 0 && qty > limitCount) {
throw new ServiceException(ResponseResult.SHOPPING_CART_LIMIT_ADD);
}
......@@ -2642,7 +2666,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
/**
* 查询购物车限购数量
*/
public int queryLimitCount(String partnerId,String appid) {
public int queryLimitCount(String partnerId, String appid) {
int limitCount = 0;
String redisKey = RedisUtil.limitCart + partnerId + "_" + appid;
//购物车内部缓存
......@@ -2702,7 +2726,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
sendQty += sendGoods.getSendNumber();
}
}
int cartLimitCount = queryLimitCount(partnerId,appid);
int cartLimitCount = queryLimitCount(partnerId, appid);
if (cartLimitCount != 0 && checkQty + sendQty > cartLimitCount) {
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, oldCartGoodsList, null, tableNumber, shoppingCartService,bizType);
throw new ServiceException(ResponseResult.SHOPPING_CART_LIMIT_ADD);
......@@ -2720,7 +2744,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
}
int cartLimitCount = queryLimitCount(partnerId,appid);
int cartLimitCount = queryLimitCount(partnerId, appid);
int sendQty = 0;
if (CollectionUtils.isNotEmpty(sendActivitys)) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity sendActivity : sendActivitys) {
......@@ -2795,7 +2819,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
private List<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> buildCoupons(List<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> oldCoupons,
List<ChooseCouponVo> coupons) {
for(int i = 0 ; i < oldCoupons.size() ; i++){
for (int i = 0; i < oldCoupons.size(); i++) {
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon oldCoupon = oldCoupons.get(i);
oldCoupon.setUseIndex(i);
}
......@@ -2831,7 +2855,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
try {
getMemberCouponListResponseDto = customerExtendClient.getMemberCouponListRequestDto(getMemberCouponListRequestDto);
} catch (Exception ex) {
ErrorLog.errorConvertJson(this.getClass(),"会员服务优惠券接口调用失败",ex);
ErrorLog.errorConvertJson(this.getClass(), "会员服务优惠券接口调用失败", ex);
}
if (getMemberCouponListResponseDto != null && Objects.equals(getMemberCouponListResponseDto.getCode(), ResponseResult.SUCCESS.getCode())) {
return getMemberCouponListResponseDto.getData();
......@@ -3256,12 +3280,12 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
requestDto.setStoreId(replaceGoodsRequestVo.getShopId());
requestDto.setProductIds(goodsId);
GetProductStockResponseDto availableStocks = stockClient.getAvailableStocks(requestDto);
if (availableStocks != null ) {
if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(availableStocks.getCode())){
if (availableStocks != null) {
if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(availableStocks.getCode())) {
// 没有请求数据
fullReplace = false;
}
if (CollectionUtils.isEmpty(availableStocks.getResult())){
if (CollectionUtils.isEmpty(availableStocks.getResult())) {
fullReplace = false;
}
......@@ -3281,7 +3305,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
// 获取到最新的 库存 stockLimitGoods 数据 放入 nowCartGoodsList 中
notCheckStock.addAll(stockLimitGoods);
}else {
} else {
fullReplace = false;
}
}
......
......@@ -446,9 +446,7 @@ public class CalculationCommonService {
activityDiscountsDto.setActivityName(this.convertName(discount.getType(), discount.getActivityName()));
activityDiscountsDto.setActivityType(this.convertType(discount.getType()));
activityDiscountsDto.setDiscountAmount(discount.getDiscount().intValue());
if(cocoPartnerId.contains(partnerId)){
activityDiscountsDto.setActualActivityGoodsNumber(discount.getActualGoodsNumber());
}
activityDiscountsDto.setActualActivityGoodsNumber(discount.getActualGoodsNumber());
activityDiscountsDtoList.add(activityDiscountsDto);
}
}
......@@ -722,6 +720,9 @@ public class CalculationCommonService {
case 33:
newType = 32;
break;
case 330:
newType = 32;
break;
}
return newType;
}
......
......@@ -96,69 +96,73 @@ public class CalculationSharingDiscountService {
HashMap<String, List<String>> spqIdToCartUuid = new HashMap<>(16);
for (int i = cartSize; i >= 0; i--) {
CartGoods cartGoods = cartGoodsList.get(i);
if (StringUtils.isBlank(cartGoods.getCouponCode()) && !cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {//非商品券
this.setCommonDiscountGoods(calculationDiscountGoodsList,cartGoods);
}
else {//商品券->商品券ID换取商品
String couponCode = cartGoods.getCouponCode();
boolean useCoupon = true; // 优惠券放在coupon字段而不是uuid中
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)){
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
useCoupon = false;
//套餐商品的固定和可选商品必有一个
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,bizType);
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL);
}
}
String couponCode = cartGoods.getCouponCode();
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
couponCode = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
}
if (StringUtils.isBlank(couponCode)) {//非商品券
this.setCommonDiscountGoods(calculationDiscountGoodsList, cartGoods);
continue;
}else {
//商品券->商品券ID换取商品
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, couponCode, menuType);
CheckSpqInfoResponseDto checkSpqInfo = 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())) {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
} else {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto);
}
if (null == checkSpqInfo) {
cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService,bizType);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService, bizType);
continue;
//跑业务异常 商品券不存
} else {
if(useCoupon){
validCouponMap.put(couponCode + checkSpqInfo.getSkuId(), checkSpqInfo);
} else{
validCouponMap.put(couponCode, checkSpqInfo);
}
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);
}
}
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
validCouponMap.put(couponCode, checkSpqInfo);
}
if (!GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
validCouponMap.put(couponCode + checkSpqInfo.getSkuId(), checkSpqInfo);
validCouponMap.put(couponCode, checkSpqInfo);
cartGoods.setName(checkSpqInfo.getCouponName());
cartGoods.setSpuName(checkSpqInfo.getCouponName());
cartGoods.setStockLimit(checkSpqInfo.isStockLimit());
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(checkSpqInfo.getCouponCode());
coupon.setActivityCode(checkSpqInfo.getActiveCode());
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = coupons.stream().filter(p -> coupon.getActivityCode().equals(p.getActivityCode()) && coupon.getCode().equals(p.getCode())).findFirst().orElse(null);
if (calculationDiscountCoupon == null){
coupons.add(coupon);
}
// 添加商品券代表的商品放入促销
String goodsId = StringUtils.isNotBlank(checkSpqInfo.getSkuId()) ? checkSpqInfo.getSkuId() : checkSpqInfo.getSpuId();
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
this.setSpqDiscountGoods(calculationDiscountGoodsList, cartGoods, goodsId, checkSpqInfo.getPrice(), cartGoods.getSpuId());
} else {
this.setSpqDiscountGoods(calculationDiscountGoodsList, cartGoods, goodsId, checkSpqInfo.getPrice());
}
}
}
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,bizType);
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL);
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);
}
cartGoods.setName(checkSpqInfo.getCouponName());
cartGoods.setSpuName(checkSpqInfo.getCouponName());
cartGoods.setStockLimit(checkSpqInfo.isStockLimit());
//买M送N券不赋值券名称
if (GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType().equals(cartGoods.getGoodsType())) {
cartGoods.setName(checkSpqInfo.getSkuName());
cartGoods.setSpuName(checkSpqInfo.getSpuName());
}
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(checkSpqInfo.getCouponCode());
coupon.setActivityCode(checkSpqInfo.getActiveCode());
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon calculationDiscountCoupon = coupons.stream().filter(p -> coupon.getActivityCode().equals(p.getActivityCode()) && coupon.getCode().equals(p.getCode())).findFirst().orElse(null);
if (calculationDiscountCoupon == null) {
coupons.add(coupon);
}
// 添加商品券代表的商品放入促销
String goodsId = StringUtils.isNotBlank(checkSpqInfo.getSkuId()) ? checkSpqInfo.getSkuId() : checkSpqInfo.getSpuId();
this.setSpqDiscountGoods(calculationDiscountGoodsList, cartGoods, goodsId, checkSpqInfo.getPrice(), couponCode);
}
}
......@@ -184,7 +188,7 @@ public class CalculationSharingDiscountService {
}
//剔除商品数量为空的
calculationDiscountGoodsList.removeIf(v->v.getGoodsQuantity().equals(0));
calculationDiscountGoodsList.removeIf(v -> v.getGoodsQuantity().equals(0));
if (CollectionUtils.isEmpty(calculationDiscountGoodsList)) {
//throw new BizServiceException(ResponseResult.SHOPPING_CART_COUPON_NOT_EXIST,"参数促销计算商品有异常");
return null;
......@@ -193,18 +197,15 @@ public class CalculationSharingDiscountService {
//组装促销
calculationSharingDiscountRequestDto.setGoods(calculationDiscountGoodsList);
calculationSharingDiscountRequestDto.setCoupons(coupons);
calculationSharingDiscountRequestDto.setOrgIds(commonService.getOrgIdsForCoupon(partnerId,storeId));
calculationSharingDiscountRequestDto.setOrgIds(commonService.getOrgIdsForCoupon(partnerId, storeId));
calculationSharingDiscountRequestDto.setDistributionFee(deliveryAmount);
calculationSharingDiscountRequestDto.setIsMember(isMember);
CalculationSharingDiscountResponseDto sharingDiscountResponseDto;
// 构建买一送一寄杯活动用户选择信息
ActiveService activeService = activeFactory.getBuildChooseGoodsService(partnerId);
activeService.buildChooseGoodsService(calculationSharingDiscountRequestDto,shoppingCartInfoRequestVo == null ? null : shoppingCartInfoRequestVo.getChooseGoods());
try {
sharingDiscountResponseDto = activityClient.calculationSharingDiscount(calculationSharingDiscountRequestDto);
}
catch (Exception e) {
ErrorLog.errorConvertJson(this.getClass(), JsonUtil.toJSONString(calculationSharingDiscountRequestDto), e);
activeService.buildChooseGoodsService(calculationSharingDiscountRequestDto, shoppingCartInfoRequestVo == null ? null : shoppingCartInfoRequestVo.getChooseGoods());
//算价
CalculationSharingDiscountResponseDto sharingDiscountResponseDto = activityClient.calculationSharingDiscount(calculationSharingDiscountRequestDto);
if(sharingDiscountResponseDto == null){
throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
}
// 返回成功
......@@ -226,8 +227,8 @@ public class CalculationSharingDiscountService {
}
// 这个是专门给coco使用的券验证错误的异常,message要抛出去
if(sharingDiscountResponseDto != null && StringUtils.equals(sharingDiscountResponseDto.getStatusCode(), ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR)){
throw new BizServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,sharingDiscountResponseDto.getMsg());
if (sharingDiscountResponseDto != null && StringUtils.equals(sharingDiscountResponseDto.getStatusCode(), ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR)) {
throw new BizServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL, sharingDiscountResponseDto.getMsg());
}
// 支付宝华莱士紧急修改代码,当促销返回103错误码时,需要报券不适用于该门店,且清空购物车
......@@ -254,6 +255,7 @@ public class CalculationSharingDiscountService {
/**
* 实物商品
*
* @param calculationDiscountGoodsList
* @param cartGoods
*/
......@@ -267,9 +269,8 @@ public class CalculationSharingDiscountService {
calculationDiscountGoods.setAddCartTime(cartGoods.getAddCartTime() == null ? 0 : cartGoods.getAddCartTime());
//if (cartGoods.getGoodsType().equals(GoodsTypeEnum.SET_MEAL_GOODS))
if (CollectionUtils.isNotEmpty(cartGoods.getProductGroupList()) || CollectionUtils.isNotEmpty(cartGoods.getProductComboList())) {
calculationDiscountGoods.setOriginalPrice(cartGoods.getFinalPrice()!=null ? cartGoods.getFinalPrice() : cartGoods.getOriginalPrice());
}
else {
calculationDiscountGoods.setOriginalPrice(cartGoods.getFinalPrice() != null ? cartGoods.getFinalPrice() : cartGoods.getOriginalPrice());
} else {
calculationDiscountGoods.setOriginalPrice(cartGoods.getOriginalPrice());
}
calculationDiscountGoods.setMemberDiscount(cartGoods.getMemberDiscount());
......@@ -321,27 +322,29 @@ public class CalculationSharingDiscountService {
/**
* 组队券码商品
*
* @param calculationDiscountGoodsList
* @param cartGoods
* @param goodsId
* @param originalPrice
*/
private void setSpqDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
, CartGoods cartGoods, String goodsId, Long originalPrice) {
CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new CalculationSharingDiscountRequestDto.CalculationDiscountGoods();
calculationDiscountGoods.setGoodsId(goodsId);
calculationDiscountGoods.setCartGoodsUid(cartGoods.getCartGoodsUid());
calculationDiscountGoods.setAddCartTime(cartGoods.getAddCartTime() == null ? 0 : cartGoods.getAddCartTime());
calculationDiscountGoods.setGoodsQuantity(cartGoods.getQty());
calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(100);
this.setCalculationDiscountGoods(calculationDiscountGoodsList,calculationDiscountGoods);
}
// private void setSpqDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
// , CartGoods cartGoods, String goodsId, Long originalPrice) {
// CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new CalculationSharingDiscountRequestDto.CalculationDiscountGoods();
// calculationDiscountGoods.setGoodsId(goodsId);
// calculationDiscountGoods.setCartGoodsUid(cartGoods.getCartGoodsUid());
// calculationDiscountGoods.setAddCartTime(cartGoods.getAddCartTime() == null ? 0 : cartGoods.getAddCartTime());
// calculationDiscountGoods.setGoodsQuantity(cartGoods.getQty());
// calculationDiscountGoods.setOriginalPrice(originalPrice);
// calculationDiscountGoods.setMemberDiscount(100);
// this.setCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods);
// }
private void setSpqDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
, CartGoods cartGoods
, String goodsId
, Long originalPrice
,String couponCode) {
, String couponCode) {
CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new CalculationSharingDiscountRequestDto.CalculationDiscountGoods();
calculationDiscountGoods.setGoodsId(goodsId);
calculationDiscountGoods.setCartGoodsUid(cartGoods.getCartGoodsUid());
......@@ -350,23 +353,23 @@ public class CalculationSharingDiscountService {
calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(100);
calculationDiscountGoods.setCouponCode(couponCode);
this.setCalculationDiscountGoods(calculationDiscountGoodsList,calculationDiscountGoods);
this.setCalculationDiscountGoods(calculationDiscountGoodsList, calculationDiscountGoods);
}
/**
* 需要促销计算的商品
*
* @param calculationDiscountGoodsList
* @param calculationDiscountGoods
*/
private void setCalculationDiscountGoods(List<CalculationSharingDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList
,CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods) {
, CalculationSharingDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods) {
int index = 0;
//当商品已经存在时,需要累加数量
if ((index = calculationDiscountGoodsList.indexOf(calculationDiscountGoods))>=0) {
if ((index = calculationDiscountGoodsList.indexOf(calculationDiscountGoods)) >= 0) {
CalculationSharingDiscountRequestDto.CalculationDiscountGoods old = calculationDiscountGoodsList.get(index);
calculationDiscountGoodsList.get(index).setGoodsQuantity(old.getGoodsQuantity()+calculationDiscountGoods.getGoodsQuantity());
}
else {
calculationDiscountGoodsList.get(index).setGoodsQuantity(old.getGoodsQuantity() + calculationDiscountGoods.getGoodsQuantity());
} else {
calculationDiscountGoodsList.add(calculationDiscountGoods);
}
......
......@@ -307,7 +307,8 @@ public class CouponDiscountCalculation {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount couponResults : couponDiscounts) {
//前端计算小计拿商品现价累计减couponDiscount,商品券换购券现价已排除
if(ActivityTypeEnum.TYPE_33.getCode()== couponResults.getType()
|| ActivityTypeEnum.TYPE_32.getCode()== couponResults.getType()){
|| ActivityTypeEnum.TYPE_32.getCode()== couponResults.getType()
|| Objects.equals(ActivityTypeEnum.TYPE_330.getCode(),couponResults.getType())){
continue;
}
couponDiscount = couponDiscount + (couponResults.getDiscount() == null ? 0 : couponResults.getDiscount());
......
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