Commit f8f1d198 by 周晓航

订单调用购物车计算虚拟商品-> 设置

Signed-off-by: 周晓航 <xiaohang.zhou@freemud.com>
parent afd2e197
......@@ -56,6 +56,7 @@ public class ShoppingCartConvertAdapter {
cartGoodsDetailDto.setSkuId(goodsId);
// fisherman 加价购商品类型设置
cartGoodsDetailDto.setOriginalProductType(getProductsVo.getType());
cartGoodsDetailDto.setProductType(sendGoods.getProductType());
cartGoodsDetailDto.setQty(product.getQty());
cartGoodsDetailDto.setSpuName(getProductsVo != null ? getProductsVo.getSpuName() : "");
cartGoodsDetailDto.setSkuName(product.getSkuName());
......
package cn.freemud.entities.dto;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/10/23 下午4:16
* @description :
*/
@Data
public class BindingCouponTypeDto {
private String activityCode;
private String cardId;
private Integer num;
private String virtualCouponCode;
}
......@@ -195,6 +195,12 @@ public class GetMenuResponseDto {
private List<SpecificationGroupBean> specificationGroupList;
//Sku 规格 如果 当前是sku 则有值
private List<SkuProductBean.SkuSpecValue> skuSpecValues;
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponTypeDto> productBindingCouponTypes;
@NoArgsConstructor
@Data
public static class SkuProductBean {
......
......@@ -123,16 +123,7 @@ public class ValidateProductInfosDto {
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponType> productBindingCouponTypes;
@Data
@NoArgsConstructor
public static class BindingCouponType {
private String activityCode;
private String cardId;
private Integer num;
private String virtualCouponCode;
}
private List<BindingCouponTypeDto> productBindingCouponTypes;
@Data
public static class SellTime {
......
......@@ -363,6 +363,28 @@ public class ShoppingCartGoodsDto {
*/
private List<CartGoodsDetailDto.MaterialGoods> materialList = new ArrayList<>(0);
/**
* 当加价购有虚拟商品 需要送券的时候 这里存放的就是 券信息 比如
* [
* {
* "num": 1,
* "activityCode": "V1634609099412143",
* "activityName": "迦勒代金券2块"
* },
* {
* "num": 1,
* "activityCode": "V1634609296167070",
* "activityName": "迦勒代金券3块"
* },
* {
* "num": 1,
* "activityCode": "V1634643280844538",
* "activityName": "迦勒代金券11块"
* }
* ]
*/
private String extInfo;
@Data
public final static class CartGoodsExtra {
/**
......
......@@ -15,7 +15,7 @@ public class CouponMsg {
* 券名称
*/
@ApiModelProperty(value = "券名称")
private String name;
private String activityName;
/**
* 券code
......
......@@ -12,6 +12,7 @@
*/
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.BindingCouponTypeDto;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
......@@ -144,6 +145,16 @@ public class CreateOrderVo {
@Data
public static class Product {
/**
* 加价购 可能会涉及 虚拟商品 类型 = 9
*/
private Integer productType;
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponTypeDto> productBindingCouponTypes;
/**
* spuId 商品原始id
*/
@NotNull(message = "spuId不能为空")
......
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.BindingCouponTypeDto;
import cn.freemud.entities.dto.GetMenuResponseDto;
import lombok.Data;
......@@ -48,4 +49,11 @@ public class GetProductsVo {
private String defaultSpecId;
private String defaultSpecName;
private List<CartGoods.CartGoodsExtra> extra;
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponTypeDto> productBindingCouponTypes;
}
\ No newline at end of file
package cn.freemud.handle;
import cn.freemud.entities.dto.ValidateProductInfosDto;
import cn.freemud.entities.dto.BindingCouponTypeDto;
import cn.freemud.entities.vo.CouponMsg;
import cn.freemud.entities.vo.PremiumExchangeResponseVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.redis.RedisCache;
import cn.freemud.utils.ResponseUtil;
import com.freemud.application.sdk.api.base.BaseResponse;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.couponcenter.online.domain.ActiveDetailVO;
......@@ -44,12 +42,12 @@ public class GetActivityMsgHandle {
* @param partnerId
* @return
*/
public List<CouponMsg> getCouponData(List<ValidateProductInfosDto.ProductBean.BindingCouponType> productBindingCoupons, String partnerId) {
public List<CouponMsg> getCouponData(List<BindingCouponTypeDto> productBindingCoupons, String partnerId) {
List<CouponMsg> retList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(productBindingCoupons)) {
// 处理 券数据 这里链路有问题 效率有点低, 后续需要优化
List<String> activityCodes = productBindingCoupons.stream()
.map(ValidateProductInfosDto.ProductBean.BindingCouponType::getActivityCode)
.map(BindingCouponTypeDto::getActivityCode)
.collect(Collectors.toList());
List<ActiveDetailVO> activeDetailVOS = this.batchQueryActivityInfo(activityCodes, partnerId);
if (CollectionUtils.isNotEmpty(activeDetailVOS)) {
......@@ -60,7 +58,7 @@ public class GetActivityMsgHandle {
ActiveDetailVO activeDetailVO = collect.get(coupon.getActivityCode());
msg.setActivityCode(coupon.getActivityCode());
msg.setNum(coupon.getNum());
msg.setName(activeDetailVO.getActiveName());
msg.setActivityName(activeDetailVO.getActiveName());
});
}
}
......
......@@ -2,6 +2,7 @@ package cn.freemud.service.impl;
import cn.freemud.adapter.ShoppingCartConvertAdapter;
import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
......@@ -10,9 +11,12 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.ResponseResult;
import cn.freemud.handle.GetActivityMsgHandle;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.IPromotionService;
import cn.freemud.service.ItemService;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
......@@ -52,7 +56,8 @@ public class AdditionalPromotionService implements IPromotionService {
private AssortmentSdkService assortmentSdkService;
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private GetActivityMsgHandle getActivityMsgHandle;
@Override
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (shoppingCartInfoRequestVo == null || CollectionUtils.isEmpty(shoppingCartInfoRequestVo.getSendGoods()) || calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getSendGoods())) {
......@@ -97,17 +102,20 @@ public class AdditionalPromotionService implements IPromotionService {
List<ShoppingCartInfoRequestVo.SendGoods> sendGoods = shoppingCartInfoRequestVo.getSendGoods();
List<String> goodsIds = sendGoods.stream().map(ShoppingCartInfoRequestVo.SendGoods::getGoodsId).collect(Collectors.toList());
Map<String, ShoppingCartInfoRequestVo.SendGoods> goodQtyMap = sendGoods.stream().collect(Collectors.toMap(ShoppingCartInfoRequestVo.SendGoods::getGoodsId, Function.identity(), (k1, k2) -> k1));
List<ProductBeanDTO> productBeanList = assortmentSdkService.getProductsInfoSdk(shoppingCartInfoRequestVo.getPartnerId()
, shoppingCartInfoRequestVo.getShopId(), goodsIds,shoppingCartInfoRequestVo.getMenuType(), shoppingCartBaseService);
if (CollectionUtils.isEmpty(productBeanList)) {
// List<ProductBeanDTO> productBeanList = assortmentSdkService.getProductsInfoSdk(shoppingCartInfoRequestVo.getPartnerId()
// , shoppingCartInfoRequestVo.getShopId(), goodsIds,shoppingCartInfoRequestVo.getMenuType(), shoppingCartBaseService);
// fisherman 剔除上面sdk的调用
List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean> productsInfo = assortmentSdkService.getProductsInfo(shoppingCartInfoRequestVo.getPartnerId()
, shoppingCartInfoRequestVo.getShopId(), goodsIds, shoppingCartInfoRequestVo.getMenuType(), shoppingCartBaseService);
if (CollectionUtils.isEmpty(productsInfo)) {
throw new ServiceException(ResponseResult.PREMIUM_EXCHANGE_ACTIVITY_NOT_EXIST);
}
return productBeanList.stream().map(productBean -> {
return productsInfo.stream().map(productBean -> {
CreateOrderVo.PremiumExchangeActivity.Product product = new CreateOrderVo.PremiumExchangeActivity.Product();
List<ProductBeanDTO.SkuProductBean> skuList = productBean.getSkuList();
List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.SkuProductBean> skuList = productBean.getSkuList();
List<String> skuIds = null;
if (null != skuList) {
skuIds = skuList.stream().map(ProductBeanDTO.SkuProductBean::getSkuId).collect(Collectors.toList());
skuIds = skuList.stream().map(GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.SkuProductBean::getSkuId).collect(Collectors.toList());
}
if (!CollectionUtils.isEmpty(skuIds)) {
for (String skuId : skuIds) {
......@@ -117,6 +125,8 @@ public class AdditionalPromotionService implements IPromotionService {
product.setSpuId(productBean.getPid());
product.setSkuId(sendGood.getGoodsId());
product.setStatus(productBean.getStatus());
product.setProductType(sendGood.getProductType());
product.setProductBindingCouponTypes(productBean.getProductBindingCouponTypes());
break;
}
}
......@@ -127,6 +137,8 @@ public class AdditionalPromotionService implements IPromotionService {
product.setSpuId(sendGood.getGoodsId());
product.setSkuId(sendGood.getGoodsId());
product.setStatus(productBean.getStatus());
product.setProductType(sendGood.getProductType());
product.setProductBindingCouponTypes(productBean.getProductBindingCouponTypes());
}
}
return product;
......@@ -213,7 +225,6 @@ public class AdditionalPromotionService implements IPromotionService {
Long totalDiscountAmount = shoppingCartGoodsResponseVo.getTotalDiscountAmount();
//加价换购活动总优惠
Long currenttotalDiscountAmount = 0L;
//购物车中添加加价购商品,并计算购物车总优惠价格
for (CreateOrderVo.PremiumExchangeActivity.Product product : additionalProducts) {
String goodsId = StringUtils.isEmpty(product.getSkuId()) ? product.getSpuId() : product.getSkuId();
GetProductsVo getProductsVo = getProductsVoMap.get(goodsId);
......@@ -223,6 +234,13 @@ public class AdditionalPromotionService implements IPromotionService {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods sendGoods = sendGoodsMap.get(goodsId);
//1.向购物车中添加商品
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = shoppingCartConvertAdapter.getCartGoodsDetailDto(product, getProductsVo, goodsId, sendGoods);
// fisherman 结算页 如果是虚拟商品 需要设置 到 extinfo里面注意
if (cartGoodsDetailDto.getProductType().compareTo(ProductTypeEnum.VIRTUAL_PRODUCT.getCode()) == 0) {
List<CouponMsg> couponData = getActivityMsgHandle.getCouponData(getProductsVo.getProductBindingCouponTypes(), shoppingCartInfoRequestVo.getPartnerId());
if (CollectionUtils.isNotEmpty(couponData)) {
cartGoodsDetailDto.setExtInfo(JSON.toJSONString(couponData));
}
}
cartGoodsDetailDtoList.add(cartGoodsDetailDto);
//2.计算优惠价格
originalTotalAmount += getProductsVo.getFinalPrice();
......
......@@ -169,6 +169,7 @@ public class ItemServiceImpl implements ItemService {
getProductsVo.setCustomerCode(productBean.getCustomerCode());
getProductsVo.setCategory(productBean.getCategory());
getProductsVo.setCategoryName(productBean.getCategoryName());
getProductsVo.setProductBindingCouponTypes(productBean.getProductBindingCouponTypes());
resultMap.put(productBean.getPid(), getProductsVo);
getProductsVo.setType(1);
// 规格ID 剔除单品
......
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