Commit 1c4d9c94 by ping.wu

合并购物车新加价购接口

parents 4b9da346 5381d1e1
...@@ -15,6 +15,7 @@ package cn.freemud.adapter; ...@@ -15,6 +15,7 @@ package cn.freemud.adapter;
import cn.freemud.base.constant.Version; import cn.freemud.base.constant.Version;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.ActivityQueryDto; import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.dto.order.CreateOrderDto; import cn.freemud.entities.dto.order.CreateOrderDto;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.PremiumExchangeResponseVo; import cn.freemud.entities.vo.PremiumExchangeResponseVo;
...@@ -102,26 +103,55 @@ public class ActivityAdapter { ...@@ -102,26 +103,55 @@ public class ActivityAdapter {
return result; return result;
} }
public PremiumExchangeResponseVo convert2PremiumExchange(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity sendActivity) { public PremiumExchangeResponseVo convert2PremiumExchange(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult) {
if (sendActivity == null) { // 返回构造对象
return null;
}
PremiumExchangeResponseVo premiumExchangeResponseVo = new PremiumExchangeResponseVo(); PremiumExchangeResponseVo premiumExchangeResponseVo = new PremiumExchangeResponseVo();
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.PARTICIPATE.getCode()); // 组装验证商品对象
premiumExchangeResponseVo.setActivityCode(sendActivity.getActivityCode());
premiumExchangeResponseVo.setActivityName(sendActivity.getActivityName());
premiumExchangeResponseVo.setMaxNum(sendActivity.getMaxNum());
List<PremiumExchangeResponseVo.PremiumExchangeProduct> products = new ArrayList<>(); List<PremiumExchangeResponseVo.PremiumExchangeProduct> products = new ArrayList<>();
sendActivity.getSendGoods().forEach(sendGoods -> { premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.NON_PARTICIPATE.getCode());
PremiumExchangeResponseVo.PremiumExchangeProduct product = new PremiumExchangeResponseVo.PremiumExchangeProduct(); if (calculationDiscountResult == null) {
product.setSpuId(sendGoods.getCategory()); return premiumExchangeResponseVo;
product.setSkuId(sendGoods.getGoodsId()); }
product.setSkuName(sendGoods.getGoodsName()); // 只取最新活动
product.setOriginalPrice(sendGoods.getOriginalPrice()); if (calculationDiscountResult != null && CollectionUtils.isNotEmpty(calculationDiscountResult.getSendGoods())) {
product.setNowPrice(sendGoods.getNowPrice()); if (CollectionUtils.isNotEmpty(calculationDiscountResult.getDiscounts())) {
product.setNumber(sendGoods.getSendNumber()); List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discountList = calculationDiscountResult.getDiscounts();
products.add(product); for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount discount : discountList) {
}); if (Objects.equals(discount.getType(), ActivityTypeEnum.TYPE_81.getCode())) {
Integer showType = discount.getIntegral() == null ? 0 : discount.getIntegral();
premiumExchangeResponseVo.setShowType(showType);
}
}
}
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity sendActivity : calculationDiscountResult.getSendGoods()) {
if (Objects.equals(sendActivity.getActivityType(), ActivityTypeEnum.TYPE_81.getCode())) {
// 判断加价购活动商品不存在直接跳出循环
if (CollectionUtils.isEmpty(sendActivity.getSendGoods())) {
break;
}
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.PARTICIPATE.getCode());
premiumExchangeResponseVo.setActivityCode(sendActivity.getActivityCode());
premiumExchangeResponseVo.setActivityName(sendActivity.getActivityName());
premiumExchangeResponseVo.setMaxNum(sendActivity.getMaxNum());
sendActivity.getSendGoods().forEach(sendGoods -> {
PremiumExchangeResponseVo.PremiumExchangeProduct product = new PremiumExchangeResponseVo.PremiumExchangeProduct();
product.setSpuId(sendGoods.getCategory());
product.setSkuId(sendGoods.getGoodsId());
product.setSkuName(sendGoods.getGoodsName());
product.setOriginalPrice(sendGoods.getOriginalPrice());
product.setNowPrice(sendGoods.getNowPrice());
product.setNumber(sendGoods.getSendNumber());
products.add(product);
});
break;
}
}
}
if(CollectionUtils.isEmpty(products)){
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.NO_ACTIVITY.getCode());
premiumExchangeResponseVo.setResultMsg(ActivityResultCodeEnum.NO_ACTIVITY.getDesc());
return premiumExchangeResponseVo;
}
premiumExchangeResponseVo.setProducts(products); premiumExchangeResponseVo.setProducts(products);
return premiumExchangeResponseVo; return premiumExchangeResponseVo;
} }
...@@ -254,4 +284,56 @@ public class ActivityAdapter { ...@@ -254,4 +284,56 @@ public class ActivityAdapter {
public PremiumExchangeResponseVo convert2PremiumExchangeSharing(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
// 返回构造对象
PremiumExchangeResponseVo premiumExchangeResponseVo = new PremiumExchangeResponseVo();
// 组装验证商品对象
List<PremiumExchangeResponseVo.PremiumExchangeProduct> products = new ArrayList<>();
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.NON_PARTICIPATE.getCode());
if (discountResult == null) {
return premiumExchangeResponseVo;
}
// 只取最新活动
if (discountResult != null && CollectionUtils.isNotEmpty(discountResult.getSendGoods())) {
if (CollectionUtils.isNotEmpty(discountResult.getDiscounts())) {
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount> discountList = discountResult.getDiscounts();
for (CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount discount : discountList) {
if (Objects.equals(discount.getType(), ActivityTypeEnum.TYPE_81.getCode())) {
Integer showType = discount.getIntegral() == null ? 0 : discount.getIntegral();
premiumExchangeResponseVo.setShowType(showType);
}
}
}
for (CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendActivity sendActivity : discountResult.getSendGoods()) {
if (Objects.equals(sendActivity.getActivityType(), ActivityTypeEnum.TYPE_81.getCode())) {
// 判断加价购活动商品不存在直接跳出循环
if (CollectionUtils.isEmpty(sendActivity.getSendGoods())) {
break;
}
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.PARTICIPATE.getCode());
premiumExchangeResponseVo.setActivityCode(sendActivity.getActivityCode());
premiumExchangeResponseVo.setActivityName(sendActivity.getActivityName());
premiumExchangeResponseVo.setMaxNum(sendActivity.getMaxNum());
sendActivity.getSendGoods().forEach(sendGoods -> {
PremiumExchangeResponseVo.PremiumExchangeProduct product = new PremiumExchangeResponseVo.PremiumExchangeProduct();
product.setSpuId(sendGoods.getCategory());
product.setSkuId(sendGoods.getGoodsId());
product.setSkuName(sendGoods.getGoodsName());
product.setOriginalPrice(sendGoods.getOriginalPrice());
product.setNowPrice(sendGoods.getNowPrice());
product.setNumber(sendGoods.getSendNumber());
products.add(product);
});
break;
}
}
}
if(CollectionUtils.isEmpty(products)){
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.NO_ACTIVITY.getCode());
premiumExchangeResponseVo.setResultMsg(ActivityResultCodeEnum.NO_ACTIVITY.getDesc());
return premiumExchangeResponseVo;
}
premiumExchangeResponseVo.setProducts(products);
return premiumExchangeResponseVo;
}
} }
...@@ -15,7 +15,7 @@ package cn.freemud.adapter; ...@@ -15,7 +15,7 @@ package cn.freemud.adapter;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean; import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.OrderSourceType; import cn.freemud.enums.CProductType;
import cn.freemud.enums.ProductType; import cn.freemud.enums.ProductType;
import cn.freemud.enums.StoreItemStatus; import cn.freemud.enums.StoreItemStatus;
import cn.freemud.utils.BeanUtil; import cn.freemud.utils.BeanUtil;
...@@ -73,8 +73,9 @@ public class StoreItemAdapter { ...@@ -73,8 +73,9 @@ public class StoreItemAdapter {
return getProductValidateDto; return getProductValidateDto;
} }
public SpuProductVo convert2SpuProductVo(GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean productBean) { public PremiumExchangeResponseVo.PremiumExchangeProduct convert2SpuProductVo(ValidateProductInfosDto.ProductBean productBean, String skuId) {
SpuProductVo spuProductVo = BeanUtil.convertBean(productBean, SpuProductVo::new); PremiumExchangeResponseVo.PremiumExchangeProduct spuProductVo = BeanUtil.convertBean(productBean, PremiumExchangeResponseVo.PremiumExchangeProduct::new);
spuProductVo.setDetailText(productBean.getDetailText());
spuProductVo.setSpuId(productBean.getPid()); spuProductVo.setSpuId(productBean.getPid());
spuProductVo.setSpuName(productBean.getName()); spuProductVo.setSpuName(productBean.getName());
spuProductVo.setName(productBean.getName()); spuProductVo.setName(productBean.getName());
...@@ -82,17 +83,27 @@ public class StoreItemAdapter { ...@@ -82,17 +83,27 @@ public class StoreItemAdapter {
.map(StoreItemStatus::getDesc).orElse("")); .map(StoreItemStatus::getDesc).orElse(""));
spuProductVo.setDefaultPrice(productBean.getFinalPrice()); spuProductVo.setDefaultPrice(productBean.getFinalPrice());
spuProductVo.setFinalPrice(productBean.getFinalPrice()); spuProductVo.setFinalPrice(productBean.getFinalPrice());
if(CollectionUtils.isNotEmpty(productBean.getSkuList())) {
for(ValidateProductInfosDto.ProductBean.SkuProductBean skuProductBean : productBean.getSkuList()) {
if(Objects.equals(skuProductBean.getSkuId(), skuId)) {
spuProductVo.setDefaultPrice(skuProductBean.getFinalPrice());
spuProductVo.setFinalPrice(skuProductBean.getFinalPrice());
break;
}
}
}
spuProductVo.setOriginalPrice(productBean.getOriginalPrice());
spuProductVo.setPicture(productBean.getPicture() + "?imageView2/1/w/225/h/225/interlace/1/q/100"); spuProductVo.setPicture(productBean.getPicture() + "?imageView2/1/w/225/h/225/interlace/1/q/100");
spuProductVo.setStockLimit(productBean.getStockLimit()); spuProductVo.setStockLimit(productBean.getStockLimit());
List<ProductGroupDto> productGroups = Lists.newArrayList(); List<ProductGroupDto> productGroups = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(productBean.getProductAttributeGroupList())) { if (CollectionUtils.isNotEmpty(productBean.getProductAttributeGroupList())) {
productBean.getProductAttributeGroupList().sort(Comparator.comparing(ProductBean.ProductAttributeGroupListBean::getAttributeType)); productBean.getProductAttributeGroupList().sort(Comparator.comparing(ValidateProductInfosDto.ProductBean.ProductAttributeGroupListBean::getAttributeType));
for (ProductBean.ProductAttributeGroupListBean attribute : productBean.getProductAttributeGroupList()) { for (ValidateProductInfosDto.ProductBean.ProductAttributeGroupListBean attribute : productBean.getProductAttributeGroupList()) {
ProductGroupDto productGroupDto = new ProductGroupDto(); ProductGroupDto productGroupDto = new ProductGroupDto();
productGroupDto.setName(attribute.getAttributeName()); productGroupDto.setName(attribute.getAttributeName());
List<ProductGroupDto.GroupDetailBean> groupDetailBeans = Lists.newArrayList(); List<ProductGroupDto.GroupDetailBean> groupDetailBeans = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(attribute.getAttributeValues())) { if (CollectionUtils.isNotEmpty(attribute.getAttributeValues())) {
for (ProductBean.ProductAttributeGroupListBean.AttributeValueBean attributeValue : attribute.getAttributeValues()) { for (ValidateProductInfosDto.ProductBean.ProductAttributeGroupListBean.AttributeValueBean attributeValue : attribute.getAttributeValues()) {
/** /**
* 过滤下架的规格和售罄的规格 * 过滤下架的规格和售罄的规格
*/ */
...@@ -118,19 +129,47 @@ public class StoreItemAdapter { ...@@ -118,19 +129,47 @@ public class StoreItemAdapter {
} }
} }
} }
// //设置是否包括多规格
// if (CollectionUtils.isNotEmpty(productBean.getProductAttributeGroupList()) || ProductType.HAVESPEC.getCode() == productBean.getType()) {
// spuProductVo.setType(8);
// spuProductVo.setHasSku(true);
// } else {
// spuProductVo.setHasSku(false);
// }
//设置是否包括多规格 //设置是否包括多规格
if (CollectionUtils.isNotEmpty(productBean.getProductAttributeGroupList()) || ProductType.HAVESPEC.getCode() == productBean.getType()) { if (ProductType.HAVESPEC.getCode() == productBean.getType()) {
spuProductVo.setType(ProductType.HAVESPEC.getCode());
spuProductVo.setHasSku(true);
} else if(CollectionUtils.isNotEmpty(productBean.getProductAttributeGroupList())){ //单规格,多属性
spuProductVo.setType(8); spuProductVo.setType(8);
spuProductVo.setHasSku(true); spuProductVo.setHasSku(true);
} else { }else {
spuProductVo.setHasSku(false); spuProductVo.setHasSku(false);
} }
//设置是否包括多规格
if(ProductType.NOSPEC.getCode() == productBean.getType() && CollectionUtils.isEmpty(productBean.getProductAttributeGroupList())) {
//单品无属性
spuProductVo.setProductType(CProductType.PRODUCT_TYPE_1.getCode());
} else if(ProductType.NOSPEC.getCode() == productBean.getType() && !CollectionUtils.isEmpty(productBean.getProductAttributeGroupList())) {
//单品有属性
spuProductVo.setProductType(CProductType.PRODUCT_TYPE_2.getCode());
} else if(ProductType.HAVESPEC.getCode() == productBean.getType() && CollectionUtils.isEmpty(productBean.getProductAttributeGroupList())) {
//多规格有属性
spuProductVo.setProductType(CProductType.PRODUCT_TYPE_8.getCode());
}else if(ProductType.HAVESPEC.getCode() == productBean.getType() && !CollectionUtils.isEmpty(productBean.getProductAttributeGroupList())) {
//多规格无属性
spuProductVo.setProductType(CProductType.PRODUCT_TYPE_10.getCode());
}else if(ProductType.SETMEAL_UPPRICE_PRODUCT.getCode() == productBean.getType()) {
//套餐
spuProductVo.setProductType(CProductType.PRODUCT_TYPE_7.getCode());
}
//TODO sku信息 //TODO sku信息
Set<String> skuSpecValueIds = Sets.newHashSet(); Set<String> skuSpecValueIds = Sets.newHashSet();
List<SpuProductVo.SkuProductVo> skuList = Lists.newArrayList(); List<SpuProductVo.SkuProductVo> skuList = Lists.newArrayList();
List<ProductBean.SkuProductBean> skuProductBeans = productBean.getSkuList(); List<ValidateProductInfosDto.ProductBean.SkuProductBean> skuProductBeans = productBean.getSkuList();
if (CollectionUtils.isNotEmpty(skuProductBeans)) { if (CollectionUtils.isNotEmpty(skuProductBeans)) {
for (ProductBean.SkuProductBean skuProductBean : skuProductBeans) { for (ValidateProductInfosDto.ProductBean.SkuProductBean skuProductBean : skuProductBeans) {
/** /**
* 过滤下架的规格 * 过滤下架的规格
*/ */
...@@ -143,7 +182,7 @@ public class StoreItemAdapter { ...@@ -143,7 +182,7 @@ public class StoreItemAdapter {
skuProductVo.setStatus(skuProductBean.getStatus()); skuProductVo.setStatus(skuProductBean.getStatus());
skuProductVo.setStatusDesc(Optional.ofNullable(StoreItemStatus.getByCode(skuProductBean.getStatus())).map(StoreItemStatus::getDesc).orElse("")); skuProductVo.setStatusDesc(Optional.ofNullable(StoreItemStatus.getByCode(skuProductBean.getStatus())).map(StoreItemStatus::getDesc).orElse(""));
// skuProductVo.setStatus(skuProductBean()); // skuProductVo.setStatus(skuProductBean());
List<ProductBean.SkuProductBean.SkuSpecValue> skuSpecValueDtos = skuProductBean.getSkuSpecValues(); List<ValidateProductInfosDto.ProductBean.SkuProductBean.SkuSpecValue> skuSpecValueDtos = skuProductBean.getSkuSpecValues();
List<String> specValueIdList = Lists.newArrayList(); List<String> specValueIdList = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(skuSpecValueDtos)) { if (CollectionUtils.isNotEmpty(skuSpecValueDtos)) {
skuSpecValueDtos.forEach(skuSpecValueDto -> { skuSpecValueDtos.forEach(skuSpecValueDto -> {
...@@ -159,9 +198,10 @@ public class StoreItemAdapter { ...@@ -159,9 +198,10 @@ public class StoreItemAdapter {
} }
} }
//TODO 多规格信息 //TODO 多规格信息
List<ProductBean.SpecificationGroupBean> specificationGroupList = productBean.getSpecificationGroupList(); List<ValidateProductInfosDto.ProductBean.SpecificationGroupBean> specificationGroupList = productBean.getSpecificationGroupList();
//规格处理 //规格处理
List<SpuProductVo.SpecificationGroupVo> specificationGroupVos = redundantSpecification(skuSpecValueIds,specificationGroupList); List<SpuProductVo.SpecificationGroupVo> specificationGroupVos = redundantSpecification(skuSpecValueIds, specificationGroupList);
addDefaultAttribute(specificationGroupVos, skuList);
if (CollectionUtils.isNotEmpty(productBean.getProductPictureList())) { if (CollectionUtils.isNotEmpty(productBean.getProductPictureList())) {
spuProductVo.setPicture(productBean.getProductPictureList().get(0).getUrl() + "?imageView2/1/w/225/h/225/interlace/1/q/100"); spuProductVo.setPicture(productBean.getProductPictureList().get(0).getUrl() + "?imageView2/1/w/225/h/225/interlace/1/q/100");
...@@ -248,7 +288,7 @@ public class StoreItemAdapter { ...@@ -248,7 +288,7 @@ public class StoreItemAdapter {
* @param specificationGroupList sku商品的规格对象集合 * @param specificationGroupList sku商品的规格对象集合
* @return * @return
*/ */
public List<SpuProductVo.SpecificationGroupVo> redundantSpecification(Set<String> skuSpecValueIds,List<ProductBean.SpecificationGroupBean> specificationGroupList) { public List<SpuProductVo.SpecificationGroupVo> redundantSpecification(Set<String> skuSpecValueIds,List<ValidateProductInfosDto.ProductBean.SpecificationGroupBean> specificationGroupList) {
//TODO 多规格信息 //TODO 多规格信息
List<SpuProductVo.SpecificationGroupVo> specificationGroupVos = Lists.newArrayList(); List<SpuProductVo.SpecificationGroupVo> specificationGroupVos = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(specificationGroupList)) { if (CollectionUtils.isNotEmpty(specificationGroupList)) {
...@@ -256,7 +296,7 @@ public class StoreItemAdapter { ...@@ -256,7 +296,7 @@ public class StoreItemAdapter {
SpuProductVo.SpecificationGroupVo specificationGroupVo = new SpuProductVo.SpecificationGroupVo(); SpuProductVo.SpecificationGroupVo specificationGroupVo = new SpuProductVo.SpecificationGroupVo();
specificationGroupVo.setSpecId(specificationGroupBean.getSpecId()); specificationGroupVo.setSpecId(specificationGroupBean.getSpecId());
specificationGroupVo.setSpecName(specificationGroupBean.getSpecName()); specificationGroupVo.setSpecName(specificationGroupBean.getSpecName());
List<ProductBean.SpecificationGroupBean.SpecValueVo> specValueDtos = specificationGroupBean.getSpecValueVos(); List<ValidateProductInfosDto.ProductBean.SpecificationGroupBean.SpecValueVo> specValueDtos = specificationGroupBean.getSpecValueVos();
List<SpuProductVo.SpecificationGroupVo.SpecValueVo> specValueVos = Lists.newArrayList(); List<SpuProductVo.SpecificationGroupVo.SpecValueVo> specValueVos = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(specValueDtos)) { if (CollectionUtils.isNotEmpty(specValueDtos)) {
specValueDtos.forEach(specValueDto -> { specValueDtos.forEach(specValueDto -> {
...@@ -280,5 +320,37 @@ public class StoreItemAdapter { ...@@ -280,5 +320,37 @@ public class StoreItemAdapter {
return specificationGroupVos; return specificationGroupVos;
} }
/**
* 默认价格,修复前端bug
* specificationGroupVos 和 skuList 排序不一致时,会出现选的价格14元,加入到购物车15元
* @param specificationGroupVos
* @param skuList
*/
private void addDefaultAttribute(List<SpuProductVo.SpecificationGroupVo> specificationGroupVos, List<SpuProductVo.SkuProductVo> skuList) {
if (CollectionUtils.isNotEmpty(skuList) && CollectionUtils.isNotEmpty(specificationGroupVos)) {
List<String> specValueIds = new ArrayList<>();
for (SpuProductVo.SpecificationGroupVo groupVo : specificationGroupVos) {
specValueIds.add(groupVo.getSpecValueVos().get(0).getSpecValueId());
}
SpuProductVo.SkuProductVo defaultSkuProductVo = null;
for (SpuProductVo.SkuProductVo sku : skuList) {
boolean hasDefault = true;
for (String spc : sku.getSpecValueId()) {
if (!specValueIds.contains(spc)) {
hasDefault = false;
break;
}
}
if (hasDefault) {
defaultSkuProductVo = sku;
break;
}
}
if (defaultSkuProductVo != null) {
skuList.remove(defaultSkuProductVo);
skuList.add(0, defaultSkuProductVo);
}
}
}
} }
...@@ -240,4 +240,12 @@ public class ShoppingCartController { ...@@ -240,4 +240,12 @@ public class ShoppingCartController {
return openStoreIappWxappConfigService.getOpenStoreIappWxappConfig(request); return openStoreIappWxappConfigService.getOpenStoreIappWxappConfig(request);
} }
/**
* 结算页获取加价购活动商品列表
*/
@PostMapping(value = "/premiumExchange")
@LogIgnore(excludeStatusCodes = {ResponseCodeConstant.RESPONSE_SUCCESS_STR},logMessage = "/premiumExchange")
public BaseResponse premiumExchange(@LogParams @RequestBody PremiumExchangeRequestVo request) {
return SDKCommonBaseContextWare.getBean(ShoppingCartNewServiceImpl.class).premiumExchange(request);
}
} }
...@@ -203,6 +203,7 @@ public class ActivityCalculationDiscountResponseDto { ...@@ -203,6 +203,7 @@ public class ActivityCalculationDiscountResponseDto {
*/ */
private String cartGoodsUid; private String cartGoodsUid;
private Boolean zeroDiscount; private Boolean zeroDiscount;
private Integer integral;
} }
@Data @Data
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: GetProductInfoDto
* @Package cn.freemud.entities.dto
* @Description:
* @author: liming.guo
* @date: 2018/5/16 19:52
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.dto;
import lombok.Data;
import java.util.List;
@Data
public class GetValidateProductInfoDto {
/**
* 商户ID
*/
private String partnerId;
/**
* 门店ID
*/
private String storeId;
/**
* 根据spu或者sku查询所有商品信息
*/
private List<String> productIds;
/**
* 查询指定spu下面的制定sku信息
*/
private List<ProductInfo> productInfoList;
/**
* 门店商品渠道 saas(开个店自提)、saasdelivery(开个店外卖)、saasmall(微商城)、wc(围餐)、mtwm(美团外卖)、jdwm(京东外卖)、fmwd(非码微店)、eleme(饿了么外卖)、ebwm(饿百外卖)
*/
private String channel;
@Data
public static class ProductInfo {
/**
* 商品spu
*/
private String spuId;
/**
* 商品sku
*/
private List<String> skuIds;
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: ProductInfosDto
* @Package cn.freemud.entities.dto
* @Description:
* @author: liming.guo
* @date: 2018/5/28 21:11
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@NoArgsConstructor
@Data
public class ValidateProductInfosDto {
private DataBean data;
private Integer errcode;
private Integer code;
private String errmsg;
@NoArgsConstructor
@Data
public static class DataBean {
private Integer count;
private List<ProductData> failureList;
private List<ProductData> successList;
}
@NoArgsConstructor
@Data
public static class ProductData {
private ProductBean productType;
}
@NoArgsConstructor
@Data
public static class ProductBean {
private String barcode;
private String brandId;
private String brandName;
private String category;
private String categoryName;
private String companyId;
private String customerCode;
/**
* 最终价格 单位分
*/
private Long finalPrice;
/**
* 是否是SKU商品 1是0否
*/
private Integer isSkuProduct;
private String name;
/**
* 原始价格 单位分
*/
private Long originalPrice;
/**
* 包装费 单位分
*/
private Long packPrice;
private String picture;
private String pid;
private Integer pknumber;
private String productionLocation;
private String remark;
private Integer saleCount;
private String sellTimeName;
private Integer sequence;
private String sourceChannel;
private String specification;
private Integer status;
private Integer stock;
private Integer stockLimit;
private String detailText;
/**
* type=10 多规格 type=1 单规格
*/
private int type;
private String unit;
private int updateStatus;
private boolean valid;
private int version;
private List<ProductLabelNameListBean> labelNames;
private List<ProductAttributeGroupListBean> productAttributeGroupList;
private List<ProductPictureListBean> productPictureList;
private List<?> productSpecification;
// private List<?> sellTimeList;
private List<?> specificationList;
//SKU
private List<SkuProductBean> skuList;
//规格信息
private List<SpecificationGroupBean> specificationGroupList;
//Sku 规格 如果 当前是sku 则有值
private List<SkuProductBean.SkuSpecValue> skuSpecValues;
/**
* 套餐商品固定搭配子商品列表 1.9.2
*/
private List<ProductComboListBean> productComboList;
/**
* 商品组表 1.9.2 套餐可选搭配
*/
private List<ProductGroupListBean> productGroupList;
/**
* 1.9.3.1 商品可售时间
*/
private List<SellTime> sellTimeList;
@Data
public static class SellTime{
private Integer dateStatus;
private String startTime;
private String endTime;
}
private List<SellTimeMonth> sellTimeMonthList;
@Data
public static class SellTimeMonth{
private Integer dayOfMonth;
private String endTime;
private String startTime;
}
@NoArgsConstructor
@Data
public static class SkuProductBean {
private Long finalPrice;
private Long originalPrice;
private String productName;
private Integer productType;
private Integer sequence;
private String skuCode;
private String skuId;
private Integer status;
//以下两个字段 1.5.4新加
private Integer stockLimit;
private Integer stockQty;
//sku商品包装费 1.5.4新加
private Long packPrice ;
private List<SkuSpecValue> skuSpecValues;
@NoArgsConstructor
@Data
public static class SkuSpecValue {
private String productId;
private Integer sequence;
private String specId;
private String specName;
private String specValue;
private String specValueId;
}
}
@NoArgsConstructor
@Data
public static class SpecificationGroupBean {
private String partnerId;
private Integer sequence;
private String specId;
private String specName;
private List<SpecValueVo> specValueVos;
@NoArgsConstructor
@Data
public static class SpecValueVo {
private Integer sequence;
private String specId;
private String specValue;
private String specValueId;
}
}
@NoArgsConstructor
@Data
public static class ProductLabelNameListBean {
private String id;
private String name;
private String partnerId;
List<?> productList;
private String storeId;
private String type;
}
@NoArgsConstructor
@Data
public static class ProductAttributeGroupListBean {
/**
* attributeName : 加料
* attributeType : 1
* attributeValues : [{"attributeValue":"","id":0,"price":0,"sequence":0,"status":0}]
*/
/**
* 属性名称
*/
private String attributeName;
/**
* 属性类型
*/
private Integer attributeType;
/**
* 属性详细信息
*/
private List<AttributeValueBean> attributeValues;
@NoArgsConstructor
@Data
public static class AttributeValueBean {
/**
* attributeValue :
* id : 0
* price : 0
* sequence : 0
* status : 0
*/
/**
* 属性值
*/
private String attributeId;
private String attributeValue;
/**
* 属性ID
*/
private Long id;
/**
*
*/
private Long price;
private Integer sequence;
private Integer status;
}
}
@NoArgsConstructor
@Data
public static class ProductPictureListBean {
/**
* pictureId : 107901339444445753
* productId : 107901318808470072
* sequence : 0
* type : default
* url : http://ojcpa0rpt.bkt.clouddn.com/xianfengfruit_DishPool_default_30b5f0ca-399a-4be3-9063-12a3d2622a38_1513952518.jpg
*/
private String pictureId;
private String productId;
private String sequence;
private String type;
private String url;
}
@NoArgsConstructor
@Data
public static class ProductComboListBean {
/**
* upc
*/
private String barcode;
/**
* 商品后台分类编码
*/
private String category;
/**
* 商品后台分类
*/
private String categoryName;
/**
* 第三方商品编码
*/
private String customerCode;
/**
* 最终售价
*/
private Integer finalPrice;
/**
* 标签列表
*/
private List<ProductLabelNameListBean> labelNames;
/**
* 扩展字段
*/
private String options;
/**
* 标准售价
*/
private Integer originalPrice;
/**
* 包装费
*/
private Integer packPrice;
/**
* 商品默认图片
*/
private String picture;
/**
* 商品Code
*/
private String productCode;
/**
* 商品ID
*/
private String productId;
/**
* 商品名称
*/
private String productName;
/**
* 商品类型 /1普通商品/3组合商品/6套餐/7加价套餐/9虚拟商品/10多规格商品
*/
private Integer productType;
/**
* 商品数量
*/
private Integer quantity;
/**
* 排序
*/
private Integer sequence;
/**
* 规格
*/
private String specification;
/**
* 商品状态 /1下架/2上架/3售罄/4删除
*/
private Integer status;
/**
* 是否设置库存
*/
private Integer stockLimit;
/**
* 单位
*/
private String unit;
}
@NoArgsConstructor
@Data
public static class ProductGroupListBean {
/**
* 创建时间
*/
private String createDate;
/**
* 商品组编号,跟groupId一样确认商品组唯一的字段
*/
private String groupCode;
/**
* 商品组详情集合
*/
private List<ProductGroupListBean.GroupDetailBean> groupDetail;
/**
* 商户ID
*/
private String linkId;
/**
* 商品组规则-选择的最大数量
*/
private Integer maxNumber;
/**
* 商品组规则-选择的最小数量
*/
private Integer minNumber;
/**
* 商品组规则-是否必选
*/
private Integer must;
/**
* 商品组名
*/
private String name;
/**
* 扩展字段
*/
private String options;
/**
* 商品组ID
*/
private String pgid;
/**
* 商品组备注
*/
private String remark;
/**
* 更新时间
*/
private String updateDate;
@NoArgsConstructor
@Data
public static class GroupDetailBean {
/**
* upc
*/
private String barcode;
/**
* 商品后台分类编码
*/
private String category;
/**
* 商品后台分类
*/
private String categoryName;
/**
* 第三方商品编码
*/
private String customerCode;
/**
* 商品组ID
*/
private String groupId;
/**
* 是否默认商品,1是0否
*/
private Integer isDefault;
/**
* 标签列表
*/
private List<ProductLabelNameListBean> labelNames;
/**
* 加价价格
*/
private Integer markUpPrice;
/**
* 扩展字段
*/
private String options;
/**
* 商品默认图片
*/
private String picture;
/**
* 商品Code
*/
private String productCode;
/**
* 最终售价
*/
private Integer productFinalPrice;
/**
* 商品ID
*/
private String productId;
/**
* 商品名称
*/
private String productName;
/**
* 标准售价
*/
private Integer productPrice;
/**
* 商品类型 /1普通商品/3组合商品/6套餐/7加价套餐/9虚拟商品/10多规格商品
*/
private Integer productType;
/**
* 排序
*/
private Integer sequence;
/**
* 规格
*/
private String specification;
/**
* 商品状态 /1下架/2上架/3售罄/4删除
*/
private Integer status;
/**
* 是否设置库存
*/
private Integer stockLimit;
/**
* 单位
*/
private String unit;
}
}
}
}
\ No newline at end of file
...@@ -173,6 +173,7 @@ public class CalculationSharingDiscountResponseDto { ...@@ -173,6 +173,7 @@ public class CalculationSharingDiscountResponseDto {
private Date endTime; private Date endTime;
private Boolean zeroDiscount; private Boolean zeroDiscount;
private Integer integral;
} }
@Data @Data
......
package cn.freemud.entities.vo; package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.NotEmpty;
...@@ -8,27 +9,41 @@ import javax.validation.constraints.NotNull; ...@@ -8,27 +9,41 @@ import javax.validation.constraints.NotNull;
@Data @Data
public class PremiumExchangeRequestVo { public class PremiumExchangeRequestVo {
@ApiModelProperty(value="版本号", name="version", example="1", required = false)
private String version; private String version;
@NotEmpty(message = "partnerId不能为空") @NotEmpty(message = "partnerId不能为空")
@ApiModelProperty(value="商户号", name="partnerId", example="1864", required = true)
private String partnerId; private String partnerId;
@NotEmpty(message = "shopId不能为空") @NotEmpty(message = "shopId不能为空")
@ApiModelProperty(value="门店ID", name="shopId", example="007", required = true)
private String shopId; private String shopId;
@NotEmpty(message = "用户会话sessionId不能为空") @NotEmpty(message = "用户会话sessionId不能为空")
@ApiModelProperty(value="sessionId", name="sessionId", example="1234", required = true)
private String sessionId; private String sessionId;
/** /**
* 订单类型 1 到店自取 2 外卖 枚举CreateOrderType * 订单类型 1 到店自取 2 外卖 枚举CreateOrderType
*/ */
@NotNull(message = "orderType 不能为空") @NotNull(message = "orderType 不能为空")
@ApiModelProperty(value="订单类型 1到店自取 2外卖", name="orderType", example="1", required = true)
private Integer orderType; private Integer orderType;
@ApiModelProperty(value="券code", name="couponCode", example="258655672617402368", required = false)
private String couponCode; private String couponCode;
/** /**
* 优惠券的活动code * 优惠券的活动code
*/ */
@ApiModelProperty(value="优惠券的活动code", name="activityCode", example="258655672617402368", required = false)
private String activityCode; private String activityCode;
/**
* 菜单类型 saas(开个店自提)、saasdelivery(开个店外卖)
*/
@ApiModelProperty(value="菜单类型 saas(开个店自提)、saasdelivery(开个店外卖)", name="menuType", example="saas", required = false)
@NotNull(message = "menuType 不能为空")
private String menuType;
} }
package cn.freemud.entities.vo; package cn.freemud.entities.vo;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductAttributeGroupListBean; import cn.freemud.entities.dto.ProductGroupDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List; import java.util.List;
...@@ -10,47 +12,360 @@ public class PremiumExchangeResponseVo { ...@@ -10,47 +12,360 @@ public class PremiumExchangeResponseVo {
/** /**
* 0-不需要参加活动,1-参加活动 * 0-不需要参加活动,1-参加活动
*/ */
@ApiModelProperty(value = "0-不需要参加活动,1-参加活动")
private Integer resultCode; private Integer resultCode;
@ApiModelProperty(value = "resultMsg")
private String resultMsg;
/** /**
* 每个订单最大商品数量 * 每个订单最大商品数量
*/ */
@ApiModelProperty(value = "每个订单最大商品数量")
private Integer maxNum; private Integer maxNum;
/** /**
* 活动code * 活动code
*/ */
@ApiModelProperty(value = "活动code")
private String activityCode; private String activityCode;
/** /**
* 活动名称 * 活动名称
*/ */
@ApiModelProperty(value = "活动名称")
private String activityName; private String activityName;
/**
* 展示形式 0:订单结算页嵌入 5:订单结算页弹窗
*/
private Integer showType;
List<PremiumExchangeProduct> products; List<PremiumExchangeProduct> products;
@Data @Data
public static class PremiumExchangeProduct { public static class PremiumExchangeProduct {
@ApiModelProperty(value = "spuId")
private String spuId; private String spuId;
@ApiModelProperty(value = "skuId")
private String skuId; private String skuId;
@ApiModelProperty(value = "skuName")
private String skuName; private String skuName;
/** /**
* 商品原价(分) /activity/query入参 * 商品原价(分) /activity/query入参
*/ */
@ApiModelProperty(value = "商品原价(分) /activity/query入参")
private Long originalPrice; private Long originalPrice;
/** /**
* 现价(分) * 现价(分)
*/ */
@ApiModelProperty(value = "现价(分)")
private Long nowPrice; private Long nowPrice;
/** /**
* 单品限购 * 单品限购
*/ */
@ApiModelProperty(value = "单品限购")
private Integer number; private Integer number;
/** /**
* 图片 * 图片
*/ */
@ApiModelProperty(value = "图片")
private String picture; private String picture;
List<ProductAttributeGroupListBean> productAttributeGroupList; /**
* 商品ID
*/
@ApiModelProperty(value = "商品ID")
private String pid;
/**
* spu商品名称
*/
@ApiModelProperty(value = "spu商品名称")
private String spuName;
/**
* 商品名称
*/
@ApiModelProperty(value = "商品名称")
private String name;
/**
* 默认spu销售价
*/
@ApiModelProperty(value = "默认spu销售价")
private Long defaultPrice;
/**
* 最终价格
*/
@ApiModelProperty(value = "最终价格")
private Long finalPrice;
/**
* 商品货号
*/
@ApiModelProperty(value = "商品货号")
private String artNo;
/**
* 属性信息
*/
@ApiModelProperty(value = "属性信息")
List<ProductGroupDto> productGroups;
/**
* SKU信息
*/
@ApiModelProperty(value = "SKU信息")
private List<SpuProductVo.SkuProductVo> skuList;
/**
* 商品规格信息
*/
@ApiModelProperty(value = "商品规格信息")
private List<SpuProductVo.SpecificationGroupVo> specificationGroupList;
/**
* 商品标签信息
*/
@ApiModelProperty(value = "商品标签信息")
List<SpuProductVo.ProductLabel> productLabels;
/**
* 折扣标签
*/
@ApiModelProperty(value = "折扣标签")
List<ProductDiscountLabel> productDiscountLabels;
/**
* 该字段为老版本小程序使用商品类型,需要兼容hasSKU一起使用,不能修改,1.9.2商品套餐之后使用新版本类型字段
* 商品类型 1=普通商品,2=附加商品,3=组合商品,4=固定套餐,5=组合套餐
*/
@ApiModelProperty(value = "该字段为老版本小程序使用商品类型,需要兼容hasSKU一起使用,不能修改,1.9.2商品套餐之后使用新版本类型字段 商品类型 1=普通商品,2=附加商品,3=组合商品,4=固定套餐,5=组合套餐")
private Integer type;
/**
* 1.9.2商品套餐新增商品类型 后续C端小程序使用该字段获取商品类型
* 1:单品无属性
* 2:单品有属性
* 7:套餐
* 8:多规格有属性
* 10:多规格无属性
*/
@ApiModelProperty(value = "1.9.2商品套餐新增商品类型 后续C端小程序使用该字段获取商品类型 1:单品无属性 \n" +
"2:单品有属性 \n" +
"7:套餐 \n" +
"8:多规格有属性 \n" +
"10:多规格无属性")
private Integer productType;
/**
* 描述
*/
@ApiModelProperty(value = "描述")
private String specification;
/**
* 备注
*/
@ApiModelProperty(value = "备注")
private String remark;
/**
* 商品排序
*/
@ApiModelProperty(value = "商品排序")
private int sequence;
/**
* 商品数量
*/
@ApiModelProperty(value = "商品数量")
private Integer qty;
/**
* 商品状态 1 下架 2 上架 3 售罄 ,已卖光
*/
@ApiModelProperty(value = "商品状态 1 下架 2 上架 3 售罄 ,已卖光")
private Integer status;
/**
* 状态描述
*/
@ApiModelProperty(value = "状态描述")
private String statusDesc;
/**
* 是否有规格信息
*/
@ApiModelProperty(value = "是否有规格信息")
private boolean hasSku;
/**
* 腾讯商品推荐id
*/
@ApiModelProperty(value = "腾讯商品推荐id")
private String traceId;
/**
* 是否有折扣信息
*/
@ApiModelProperty(value = "是否有折扣信息")
private boolean hasDiscount;
/**
* 每笔订单限制购买数量
*/
@ApiModelProperty(value = "每笔订单限制购买数量")
private Integer limitPerOrder;
/**
* 折扣信息描述
*/
@ApiModelProperty(value = "折扣信息描述")
private String discountDesc;
/**
* 商品券生效开始时间
*/
@ApiModelProperty(value = "商品券生效开始时间")
private String startDate;
/**
* 商品券生效截止时间
*/
@ApiModelProperty(value = "商品券生效截止时间")
private String endDate;
@ApiModelProperty(value = "stockLimit")
private Integer stockLimit;
/**
* 1.5.5版本添加
* 商品参与活动类型(61:买一赠一)
*/
@ApiModelProperty(value = "1.5.5版本添加\n" +
"商品参与活动类型(61:买一赠一)")
private Integer activityType;
/**
* 1.5.5版本添加
* 商品参与活动名称
*/
@ApiModelProperty(value = "1.5.5版本添加\n" +
"商品参与活动名称")
private String activityName;
/**
* 商品描述信息
*/
@ApiModelProperty(value = "商品描述信息")
private String detailText;
/**
* 活动商品描述
*/
@ApiModelProperty(value = "活动商品描述")
private String goodsDesc;
@Data
@NoArgsConstructor
public static class ProductLabel {
/**
* 标签名称
*/
@ApiModelProperty(value = "标签名称")
private String labelName;
}
@Data
@NoArgsConstructor
public static class ProductDiscountLabel {
/**
* 标签名称
*/
@ApiModelProperty(value = "标签名称")
private String labelName;
/**
* 标签类型 1:折扣标签 2:限购标签
*/
@ApiModelProperty(value = "标签类型 1:折扣标签 2:限购标签")
private Integer labelType;
}
@NoArgsConstructor
@Data
public static class SkuProductVo {
/**
* sku id
*/
@ApiModelProperty(value = "sku id")
private String skuId;
/**
* sku 名称
*/
@ApiModelProperty(value = "sku 名称")
private String skuName;
/**
* 最终价格
*/
@ApiModelProperty(value = "最终价格")
private Long finalPrice;
/**
* 市场价
*/
@ApiModelProperty(value = "市场价")
private Long originalPrice;
/**
* sku 状态
*/
@ApiModelProperty(value = "sku 状态")
private Integer status;
/**
* 状态描述
*/
@ApiModelProperty(value = "状态描述")
private String statusDesc;
/**
* 规格id
*/
@ApiModelProperty(value = "规格id")
private String[] specValueId;
/**
* 活动类型
*/
@ApiModelProperty(value = "活动类型")
private Integer activityType;
/**
* 活动名称
*/
@ApiModelProperty(value = "活动名称")
private String activityName;
}
@NoArgsConstructor
@Data
public static class SpecificationGroupVo {
/**
* 规格名称 杯型 ,加料
*/
@ApiModelProperty(value = "规格名称 杯型 ,加料")
private String specName;
/**
* 规格id 1001
*/
@ApiModelProperty(value = "规格id 1001")
private String specId;
/**
* 规格信息
*/
@ApiModelProperty(value = "规格信息")
private List<SpuProductVo.SpecificationGroupVo.SpecValueVo> specValueVos;
@NoArgsConstructor
@Data
public static class SpecValueVo {
/**
* 规格id 1001
*/
@ApiModelProperty(value = "规格id 1001")
private String specId;
/**
* 规格值 id 100100
*/
@ApiModelProperty(value = "规格值 id 100100")
private String specValueId;
/**
* 规格值名称 大杯,小杯
*/
@ApiModelProperty(value = "规格值名称 大杯,小杯")
private String specValueName;
}
}
} }
} }
...@@ -16,6 +16,11 @@ public enum ActivityResultCodeEnum { ...@@ -16,6 +16,11 @@ public enum ActivityResultCodeEnum {
//0:不参加 1:参加 //0:不参加 1:参加
NON_PARTICIPATE(0, "不需要参加活动"), NON_PARTICIPATE(0, "不需要参加活动"),
PARTICIPATE(1, "参加活动"), PARTICIPATE(1, "参加活动"),
GOODFILTER(2, "商品状态已变化"),
GOOD_NOT_IN_MUNU(3, "商品不在菜单"),
GOOD_NOT_AVAILABLE(4, "商品在门店下不可售"),
NO_ACTIVITY(5, "没有可用活动"),
STOCK_LIMIT(6, "商品库存不足"),
; ;
private Integer code; private Integer code;
......
package cn.freemud.enums;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: productType
* @Package cn.freemud.enums
* @Description: 这个类是给C端小程序的枚举类,最终版本
* @author: zhenghuan.yang
* @date: 2018/10/23 17:50
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public enum CProductType {
PRODUCT_TYPE_1(1,"单品无属性"),
PRODUCT_TYPE_2(2,"单品有属性"),
PRODUCT_TYPE_7(7,"套餐商品"),
PRODUCT_TYPE_8(8,"多规格有属性"),
PRODUCT_TYPE_10(10,"多规格无属性");
private int code;
private String desc;
CProductType(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
...@@ -308,4 +308,12 @@ public interface ShoppingCartNewService { ...@@ -308,4 +308,12 @@ public interface ShoppingCartNewService {
} }
} }
/**
* 结算页获取加价购活动商品列表
* @param request
* @return
*/
default BaseResponse<PremiumExchangeResponseVo> premiumExchange(PremiumExchangeRequestVo request){
return null;
};
} }
...@@ -15,6 +15,7 @@ package cn.freemud.service.impl; ...@@ -15,6 +15,7 @@ package cn.freemud.service.impl;
import cn.freemud.adapter.ActivityAdapter; import cn.freemud.adapter.ActivityAdapter;
import cn.freemud.adapter.CouponAdapter; import cn.freemud.adapter.CouponAdapter;
import cn.freemud.adapter.ShoppingCartConvertAdapter; import cn.freemud.adapter.ShoppingCartConvertAdapter;
import cn.freemud.adapter.StoreItemAdapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.util.DateUtil; import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
...@@ -22,13 +23,13 @@ import cn.freemud.constant.ShoppingCartConstant; ...@@ -22,13 +23,13 @@ import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.demo.controller.ShoppingCartDemoController; import cn.freemud.demo.controller.ShoppingCartDemoController;
import cn.freemud.demo.entities.dto.goods.add.list.BaseListCartGoodsVO; import cn.freemud.demo.entities.dto.goods.add.list.BaseListCartGoodsVO;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.activity.ActivityQueryDto; import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto; import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountRequestDto; import cn.freemud.entities.dto.calculate.CalculationSharingDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto; import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.dto.openplatform.WeixinProductRequestDto; import cn.freemud.entities.dto.openplatform.WeixinProductRequestDto;
import cn.freemud.entities.dto.openplatform.WeixinProductResponseDto; import cn.freemud.entities.dto.openplatform.WeixinProductResponseDto;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.shoppingCart.SendPoint; import cn.freemud.entities.dto.shoppingCart.SendPoint;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.user.GetSessionUserInfoDto; import cn.freemud.entities.dto.user.GetSessionUserInfoDto;
...@@ -36,8 +37,8 @@ import cn.freemud.entities.dto.user.GetUserScoreUseDetailRequest; ...@@ -36,8 +37,8 @@ import cn.freemud.entities.dto.user.GetUserScoreUseDetailRequest;
import cn.freemud.entities.dto.user.GetUserScoreUserDetailResponse; import cn.freemud.entities.dto.user.GetUserScoreUserDetailResponse;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.interceptor.BizServiceException; import cn.freemud.interceptor.BizServiceException;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.*; import cn.freemud.service.*;
import cn.freemud.service.delivery.DeliveryFactory; import cn.freemud.service.delivery.DeliveryFactory;
...@@ -79,7 +80,6 @@ import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest; ...@@ -79,7 +80,6 @@ import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService; import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.sun.org.apache.xpath.internal.operations.Bool;
import javafx.util.Pair; import javafx.util.Pair;
import javafx.util.Pair; import javafx.util.Pair;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -100,7 +100,6 @@ import java.util.*; ...@@ -100,7 +100,6 @@ import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import static cn.freemud.constant.ApplicationConstant.*; import static cn.freemud.constant.ApplicationConstant.*;
import static cn.freemud.constant.ShoppingCartConstant.SHOPPING_CART_EMPTY_GOODS_LIST; import static cn.freemud.constant.ShoppingCartConstant.SHOPPING_CART_EMPTY_GOODS_LIST;
import static cn.freemud.constant.ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS; import static cn.freemud.constant.ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS;
...@@ -207,6 +206,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -207,6 +206,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
@Autowired @Autowired
private ShoppingCartDemoController shoppingCartDemoController; private ShoppingCartDemoController shoppingCartDemoController;
@Autowired
private StoreItemAdapter storeItemAdapter;
/** /**
* 从微信卡券向购物车中添加商品 * 从微信卡券向购物车中添加商品
...@@ -2705,4 +2707,160 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -2705,4 +2707,160 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return Boolean.FALSE; return Boolean.FALSE;
} }
/**
* 结算页获取加价购活动商品列表
* @param request
* @return
*/
public BaseResponse<PremiumExchangeResponseVo> premiumExchange(PremiumExchangeRequestVo request){
// 获取用户信息
CustomerInfoVo assortmentCustomerInfoVo = getCustomerInfoVo(request.getSessionId());
String userId = assortmentCustomerInfoVo.getMemberId();
String partnerId = request.getPartnerId();
String storeId = request.getShopId();
String couponCode = request.getCouponCode();
String activityCode = request.getActivityCode();
String appId = assortmentCustomerInfoVo.getAppId();
String menuType = request.getMenuType();
Integer orderType = request.getOrderType();
// 返回构造对象
PremiumExchangeResponseVo premiumExchangeResponseVo = new PremiumExchangeResponseVo();
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.NON_PARTICIPATE.getCode());
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, request.getSessionId(), null, shoppingCartBaseService);
if (grayPush(partnerId,storeId,"2")) {
// 当couponCode不为空时,需参与价格计算
ArrayList<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
if (StringUtils.isNotEmpty(couponCode)) {
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(couponCode);
coupon.setActivityCode(activityCode);
coupons.add(coupon);
}
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType
, partnerId
, storeId
, userId
, appId
, orderType
, assortmentCustomerInfoVo.isMemberPaid()
, cartGoodsList
, coupons //券
, null //加价购商品
, 0L
, null);
premiumExchangeResponseVo = activityAdapter.convert2PremiumExchangeSharing(discountResult);
}else {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
// 当couponCode不为空时,需参与价格计算
if (StringUtils.isNotEmpty(couponCode)) {
ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon coupon = new ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(couponCode);
coupon.setActivityCode(activityCode);
coupons.add(coupon);
}
// 获取优惠信息
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = getCalculationDiscountResult(menuType,partnerId,storeId,userId,appId,assortmentCustomerInfoVo.getWxAppId(),orderType,assortmentCustomerInfoVo.isMemberPaid(),cartGoodsList,coupons,null,null,0L);
premiumExchangeResponseVo = activityAdapter.convert2PremiumExchange(calculationDiscountResult);
}
if(!Objects.equals(ActivityResultCodeEnum.PARTICIPATE.getCode(),premiumExchangeResponseVo.getResultCode())){
return ResponseUtil.success(premiumExchangeResponseVo);
}
List<PremiumExchangeResponseVo.PremiumExchangeProduct> products = premiumExchangeResponseVo.getProducts();
// 获取所有spu商品Id 一个spu在菜单里面,他的sku肯定也在菜单里
List<String> spuIds = products.stream().map(PremiumExchangeResponseVo.PremiumExchangeProduct::getSpuId).distinct().collect(toList());
GetValidateProductInfoDto getProductInfoDto = new GetValidateProductInfoDto();
getProductInfoDto.setPartnerId(partnerId);
getProductInfoDto.setStoreId(storeId);
getProductInfoDto.setChannel(menuType);
getProductInfoDto.setProductIds(spuIds);
ValidateProductInfosDto productInfosDto = storeItemClient.validateShopContainProduct(getProductInfoDto);
if (!Objects.equals(productInfosDto.getErrcode(), Integer.valueOf(ResponseResult.SUCCESS.getCode()))
|| productInfosDto.getData() ==null
|| CollectionUtils.isEmpty(productInfosDto.getData().getSuccessList())){
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.GOOD_NOT_AVAILABLE.getCode());
premiumExchangeResponseVo.setResultMsg(ActivityResultCodeEnum.GOOD_NOT_AVAILABLE.getDesc());
return ResponseUtil.success(premiumExchangeResponseVo);
}
//剔除products中库存不足的商品
this.removeByProductStock(products, productInfosDto.getData().getSuccessList(), partnerId, storeId,menuType);
if(CollectionUtils.isEmpty(products)){
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.STOCK_LIMIT.getCode());
premiumExchangeResponseVo.setResultMsg(ActivityResultCodeEnum.STOCK_LIMIT.getDesc());
return ResponseUtil.success(premiumExchangeResponseVo);
}
// 组装返回商品集合
List<PremiumExchangeResponseVo.PremiumExchangeProduct> productResults = new ArrayList<>();
Map<String,ValidateProductInfosDto.ProductBean> productBeanMap = productInfosDto.getData().getSuccessList().stream().map(ValidateProductInfosDto.ProductData::getProductType).collect(Collectors.toMap(ValidateProductInfosDto.ProductBean::getPid,a->a, (k1, k2) -> k1));
// 判断商品是否在菜单内
for (PremiumExchangeResponseVo.PremiumExchangeProduct premiumExchangeProduct : products) {
// 加价购的商品,现在的商品都为sku级别
ValidateProductInfosDto.ProductBean productBean = productBeanMap.get(premiumExchangeProduct.getSpuId());
if(productBean == null) {
continue;
}
boolean onSale = false;//商品是否可售
if(Objects.equals(productBean.getPid(),premiumExchangeProduct.getSkuId()) && Objects.equals(productBean.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())){
onSale = true;
}else if(CollectionUtils.isNotEmpty(productBean.getSkuList())){
onSale = productBean.getSkuList().stream().anyMatch(sku->Objects.equals(sku.getSkuId(),premiumExchangeProduct.getSkuId()) && Objects.equals(sku.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode()));
}
if(onSale) {
PremiumExchangeResponseVo.PremiumExchangeProduct result = storeItemAdapter.convert2SpuProductVo(productBean, premiumExchangeProduct.getSkuId());
result.setSkuId(premiumExchangeProduct.getSkuId());
result.setSkuName(premiumExchangeProduct.getSkuName());
result.setNowPrice(premiumExchangeProduct.getNowPrice());
result.setOriginalPrice(productBean.getFinalPrice());
result.setNumber(premiumExchangeProduct.getNumber());
result.setArtNo(premiumExchangeProduct.getArtNo());
productResults.add(result);
}
}
if (CollectionUtils.isEmpty(productResults)){
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.GOOD_NOT_AVAILABLE.getCode());
premiumExchangeResponseVo.setResultMsg(ActivityResultCodeEnum.GOOD_NOT_AVAILABLE.getDesc());
return ResponseUtil.success(premiumExchangeResponseVo);
}
premiumExchangeResponseVo.setProducts(productResults);
return ResponseUtil.success(premiumExchangeResponseVo);
}
private void removeByProductStock(List<PremiumExchangeResponseVo.PremiumExchangeProduct> products, List<ValidateProductInfosDto.ProductData> productDataList, String partnerId, String storeId,String channel) {
List<Long> limitSkuIds = new ArrayList<>();
productDataList.stream().forEach(ProductData->{
ValidateProductInfosDto.ProductBean productType = ProductData.getProductType();
if(productType != null){
if(CollectionUtils.isNotEmpty(productType.getSkuList())){
limitSkuIds.addAll(productType.getSkuList().stream().filter(sku->Objects.equals(sku.getStockLimit(),1)).map(sku->Long.valueOf(sku.getSkuId())).collect(Collectors.toList()));
}else{
if(Objects.equals(productType.getStockLimit(),1)){
limitSkuIds.add(Long.valueOf(productType.getPid()));
}
}
}
});
// skuId有限制的
if (CollectionUtils.isNotEmpty(limitSkuIds)) {
GetProductStockRequestDto stockRequestDto = new GetProductStockRequestDto();
stockRequestDto.setChannel(channel);
stockRequestDto.setPartnerId(partnerId);
stockRequestDto.setStoreId(storeId);
stockRequestDto.setProductIds(limitSkuIds);
GetProductStockResponseDto availableStockResponse = stockClient.getAvailableStocks(stockRequestDto);
Map<Long, GetProductStockResponseDto.DataBean> dataBeanMap = availableStockResponse.getResult().stream().collect(Collectors.toMap(GetProductStockResponseDto.DataBean::getPid, (p) -> p));
Iterator<PremiumExchangeResponseVo.PremiumExchangeProduct> it = products.iterator();
while (it.hasNext()) {
PremiumExchangeResponseVo.PremiumExchangeProduct pe = it.next();
GetProductStockResponseDto.DataBean dataBean = dataBeanMap.get(Long.parseLong(pe.getSkuId()));
if (dataBean != null && dataBean.getQty() <= 0) {
// 过滤下架的商品
it.remove();
}
}
}
}
} }
...@@ -65,5 +65,9 @@ public interface StoreItemClient { ...@@ -65,5 +65,9 @@ public interface StoreItemClient {
@PostMapping("Shop/ValidateShopProduct") @PostMapping("Shop/ValidateShopProduct")
ProductResponseDTO<ValiadShopProductResponse> validateShopProduct(@RequestBody ValidateShopProductRequest request); ProductResponseDTO<ValiadShopProductResponse> validateShopProduct(@RequestBody ValidateShopProductRequest request);
/**
* 校验商品在当前门店是否可售
*/
@PostMapping("/Shop/validateShopContainProduct")
ValidateProductInfosDto validateShopContainProduct(@RequestBody GetValidateProductInfoDto getProductInfoDto);
} }
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