Commit f8f1d198 by 周晓航

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

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