Commit 9b7f03a1 by ping.wu

Merge branches 'feature/20200926_麦咖啡特定属性与加料_wuping' and 'master' of…

Merge branches 'feature/20200926_麦咖啡特定属性与加料_wuping' and 'master' of http://gitlab.freemud.com/order-group-application/order-group
parents 59432323 376d2d10
......@@ -49,5 +49,12 @@ public class ShoppingCartConstant {
*/
public static final int PRODUCT_DOWN= 104;
public static final String CART_PRODUCT_INVALID_STATE = "您选择的【$spuName】商品已失效;";
/**
* 必选商品组无勾选商品
*/
public static final int PRODUCT_GROUP_EMPTY= 109;
public static final String CART_PRODUCT_GROUP_EMPTY_STATE = "您选择的【$spuName】商品有未选商品";
}
......@@ -119,6 +119,11 @@ public class CartGoods {
private List<CartGoodsExtra> extra;
/**
* 麦咖啡定制属性
*/
private List<SpecialExtra> specialExtra;
/**
* 创建时间(mili)
*/
private long createTimeMili = System.currentTimeMillis();
......@@ -200,11 +205,29 @@ public class CartGoods {
}
@Data
public final static class SpecialExtra {
/**
* 属性Id
*/
private String attributeId;
/**
* 属性名
*/
private String attributeName;
/**
* 麦咖啡特定属性入机code
*/
private String specialCode;
}
@Data
public final static class ComboxGoods{
/**
* 单规格spuId,多规格skuId
*/
private String goodsId;
private String spuId;
private String skuId;
private String skuName;
/**
......@@ -286,6 +309,16 @@ public class CartGoods {
private List<CartGoodsExtra> extra;
/**
* 麦咖啡定制属性
*/
private List<SpecialExtra> specialExtra;
/**
* 麦咖啡套餐商品加料
*/
private List<MaterialGoods> productMaterialList;
/**
* 税率
*/
private Double tax;
......
package cn.freemud.entities.dto.product;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ProductAttributeValueType
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:03
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class ProductAttributeValueType {
private String attributeId;
private String attributeValue;
}
package cn.freemud.entities.dto.product;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ProductSpecAttrValueGroupType
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/27 10:54
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class ProductSpecAttrValueGroupType {
//规格小类id
private String specValueId;
//规格小类属性名称
private String name;
//规格小类属性编号
private String qty;
}
package cn.freemud.entities.dto.product;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValiadShopProductResponse
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:05
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class ValiadShopProductResponse {
private List<ValiadShopProductResult> failureList;
private List<ValiadShopProductResult> successList;
}
package cn.freemud.entities.dto.product;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import lombok.Data;
import java.util.Map;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValiadShopProductResult
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:05
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class ValiadShopProductResult {
private int code;
private String message;
private String skuId;
private String spuId;
private ProductBeanDTO productType;
private String uuid;
private Map<String,ProductBeanDTO> subProductTypeMap;
}
package cn.freemud.entities.dto.product;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValidateShopProductRequest
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:01
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class ValidateShopProductRequest {
private String partnerId;
private String storeId;
private String channel;
private List<ValidateShopProductType> productTypeList;
}
package cn.freemud.entities.dto.product;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValidateShopProductType
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:01
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class ValidateShopProductType {
private String uuid;
private String spuId;
private String skuId;
private List<ValidateSkuProductType> comboProductTypeList;
private List<ValidateSkuProductType> productGroupTypeList;
private Integer price;
private Integer memberDiscount;
private List<ProductAttributeValueType> attributeList;
private List<Integer> validateStatuses;
private Integer validatePrice = 1;
private Integer validateAttribute = 1;
}
package cn.freemud.entities.dto.product;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ValidateSkuProductType
* @Package cn.freemud.entities.dto.product
* @Description:
* @author: ping1.wu
* @date: 2020/9/26 20:02
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class ValidateSkuProductType {
private String skuId;
private String productId;
private Integer price;
private Integer markUpPrice;
private Integer qty;
private Long productGroupId;
private List<ProductAttributeValueType> attributeList;
private ProductSpecAttrValueGroupType productSpecAttrValueGroupType;
}
......@@ -3,6 +3,7 @@ package cn.freemud.entities.dto.shoppingCart;
import cn.freemud.entities.dto.OrderProductAddInfo;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ShareDiscountActivityDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.SubtractStockVO;
import com.alibaba.fastjson.JSON;
import lombok.Builder;
......@@ -245,6 +246,8 @@ public class ShoppingCartGoodsDto {
*/
private List<CartGoodsDetailDto.CartGoodsExtra> extraList = new ArrayList<>(0);
private List<CartGoods.SpecialExtra> specialExtra = new ArrayList<>();
/**
* 当前商品享受的促销活动
*/
......
......@@ -124,6 +124,11 @@ public class CartGoods {
private List<CartGoodsExtra> extra;
/**
* 麦咖啡定制属性
*/
private List<SpecialExtra> specialExtra;
/**
* 创建时间(mili)
*/
private long createTimeMili = System.currentTimeMillis();
......@@ -206,11 +211,29 @@ public class CartGoods {
}
@Data
public final static class SpecialExtra {
/**
* 属性Id
*/
private String attributeId;
/**
* 属性名
*/
private String attributeName;
/**
* 麦咖啡特定属性入机code
*/
private String specialCode;
}
@Data
public final static class ComboxGoods {
/**
* 单规格spuId,多规格skuId
*/
private String goodsId;
private String spuId;
private String skuId;
private String skuName;
/**
......@@ -265,6 +288,11 @@ public class CartGoods {
* 配料或属性
*/
private List<CartGoodsExtra> extra;
/**
* 麦咖啡特定属性
*/
private List<SpecialExtra> specialExtra;
/**
* 1:称重菜
*/
......@@ -295,6 +323,10 @@ public class CartGoods {
* 费率代码
*/
private String taxId;
/**
* 商品原始加料数据
*/
private List<MaterialGoods> productMaterialList;
@Override
public int hashCode() {
......@@ -313,6 +345,9 @@ public class CartGoods {
if (CollectionUtils.isNotEmpty(extra)) {
extra.stream().sorted(Comparator.comparing(CartGoodsExtra::getAttributeId)).forEach(e -> sb.append(e.getAttributeId()));
}
if (CollectionUtils.isNotEmpty(specialExtra)) {
specialExtra.stream().sorted(Comparator.comparing(SpecialExtra::getAttributeId)).forEach(e -> sb.append(e.getAttributeId()));
}
return sb.toString();
}
}
......@@ -334,6 +369,9 @@ public class CartGoods {
if (CollectionUtils.isNotEmpty(productComboList)) {
for (ComboxGoods goods : productComboList) {
originalString.append(goods.toString());
if (CollectionUtils.isNotEmpty(goods.getSpecialExtra())) {
goods.getSpecialExtra().stream().sorted(Comparator.comparing(SpecialExtra::getAttributeId)).forEach(e -> originalString.append(e.getAttributeId()));
}
}
}
if (CollectionUtils.isNotEmpty(productGroupList)) {
......@@ -344,6 +382,9 @@ public class CartGoods {
if (CollectionUtils.isNotEmpty(productMaterialList)) {
productMaterialList.stream().sorted(Comparator.comparing(MaterialGoods::getSpuId)).forEach(e -> originalString.append(e.getSpuId()));
}
if (CollectionUtils.isNotEmpty(specialExtra)) {
specialExtra.stream().sorted(Comparator.comparing(SpecialExtra::getAttributeId)).forEach(e -> originalString.append(e.getAttributeId()));
}
//当前字符串
CartGoods cartGoods = (CartGoods) o;
......@@ -356,6 +397,9 @@ public class CartGoods {
if (CollectionUtils.isNotEmpty(cartGoods.getProductComboList())) {
for (ComboxGoods goods : cartGoods.getProductComboList()) {
currentString.append(goods.toString());
if (CollectionUtils.isNotEmpty(goods.getSpecialExtra())) {
goods.getSpecialExtra().stream().sorted(Comparator.comparing(SpecialExtra::getAttributeId)).forEach(e -> currentString.append(e.getAttributeId()));
}
}
}
if (CollectionUtils.isNotEmpty(cartGoods.getProductGroupList())) {
......@@ -366,6 +410,9 @@ public class CartGoods {
if (CollectionUtils.isNotEmpty(cartGoods.getProductMaterialList())) {
cartGoods.getProductMaterialList().stream().sorted(Comparator.comparing(MaterialGoods::getSpuId)).forEach(e -> currentString.append(e.getSpuId()));
}
if (CollectionUtils.isNotEmpty(cartGoods.getSpecialExtra())) {
cartGoods.getSpecialExtra().stream().sorted(Comparator.comparing(SpecialExtra::getAttributeId)).forEach(e -> currentString.append(e.getAttributeId()));
}
return StringUtils.equals(originalString.toString(), currentString.toString());
}
......
......@@ -19,15 +19,32 @@ import java.util.List;
@Data
public class ComboxGoodsRequestVo {
/**
* 麦咖啡多规格商品spuid
*/
private String spuId;
private String skuId;
private Integer qty;
/**
* 商品组Id
*/
private String productGroupId;
/**
* 麦咖啡空键位
*/
private String emptyKey;
/**
* 商品额外的属性
*/
List<CartGoods.CartGoodsExtra> extra;
private List<CartGoods.SpecialExtra> specialExtra;
/**
* 麦咖啡多规格商品加料
*/
private List<MaterialRequestVo> productMaterialList;
}
......@@ -20,7 +20,7 @@ public enum GoodsTypeEnum {
SET_MEAL_GOODS(3, "套餐商品"),
SKU_GOODS(4, "sku商品"),
SPU_GOODS(5, "spu商品"),
REDUCE_PRICE_GOODS(6,"加价购商品"),
REDUCE_PRICE_GOODS(6,"超值加购商品"),
MATERIAL(88, "有加料的商品"),
EXCEPTION_GOODS(99, "异常商品:商品菜单变化导致和购物车不商品匹配");
private Integer goodsType;
......
......@@ -372,11 +372,13 @@ public class CalculationServiceImpl {
calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(memberDiscount);
ArrayList<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material> materials = new ArrayList<>();
//可选搭配
if (cartGoods != null && CollectionUtils.isNotEmpty(cartGoods.getProductGroupList())) {
ArrayList<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material> materials = new ArrayList<>();
for (CartGoods.ComboxGoods materialGoods : cartGoods.getProductGroupList()) {
if("0".equals(materialGoods.getGoodsId())){
continue;
}
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material material = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material();
material.setType(2);
material.setGoodsId(materialGoods.getGoodsId());
......@@ -384,9 +386,37 @@ public class CalculationServiceImpl {
material.setOriginalPrice(materialGoods.getFinalPrice());
materials.add(material);
}
calculationDiscountGoods.setSmallMaterial(materials);
}
//固定商品
if (cartGoods != null && CollectionUtils.isNotEmpty(cartGoods.getProductComboList())) {
for (CartGoods.ComboxGoods materialGoods : cartGoods.getProductComboList()) {
//加料
if (CollectionUtils.isNotEmpty(materialGoods.getProductMaterialList())) {
for (CartGoods.MaterialGoods materialGoods2 : materialGoods.getProductMaterialList()) {
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material material = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material();
material.setType(1);
material.setGoodsId(materialGoods2.getSpuId());
material.setGoodsQuantity(cartGoods.getQty());
material.setOriginalPrice(materialGoods2.getFinalPrice());
materials.add(material);
}
}
}
}
//加料
if (cartGoods != null && CollectionUtils.isNotEmpty(cartGoods.getProductMaterialList())) {
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material material = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material();
material.setType(1);
material.setGoodsId(materialGoods.getSpuId());
material.setGoodsQuantity(cartGoods.getQty());
material.setOriginalPrice(materialGoods.getFinalPrice());
materials.add(material);
}
}
calculationDiscountGoods.setSmallMaterial(materials);
calculationDiscountGoodsList.add(calculationDiscountGoods);
// //累加需加入计算的商品
......
......@@ -70,13 +70,15 @@ public class SetMealCalculation {
long productComboTotalAmount = productComboAmount * cartGoods.getQty();
cartGoods.setOriginalAmount(productGroupTotalAmount + productComboTotalAmount);
cartGoods.setOriginalPrice(productGroupTotalAmount + productComboTotalAmount);
cartGoods.setOriginalPrice(productComboTotalAmount);
cartGoods.setAmount(productGroupTotalAmount + productComboTotalAmount);
cartGoods.setFinalPrice(productComboTotalAmount);
// 套餐(固定商品)现价
String toastMsg = getTotalAmount(cartGoods, productGroupAmount, numberMap, goodsMap);
if (StringUtils.isNotEmpty(toastMsg)) {
shoppingCartGoodsResponseVo.setToastMsg(toastMsg);
}
// String toastMsg = getTotalAmount(cartGoods, productGroupAmount, numberMap, goodsMap);
// if (StringUtils.isNotEmpty(toastMsg)) {
// shoppingCartGoodsResponseVo.setToastMsg(toastMsg);
// }
}
......
......@@ -2,6 +2,7 @@ package cn.freemud.service.impl.mcoffee.entity;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ComboxGoodsRequestVo;
import cn.freemud.entities.vo.MaterialRequestVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
......@@ -59,10 +60,6 @@ public class MCoffeeAddGoodsRequestVo {
private String spuId;
private String skuId;
/**
* 商品额外的属性
*/
private List<CartGoods.CartGoodsExtra> extra;
private String version;
......@@ -75,6 +72,10 @@ public class MCoffeeAddGoodsRequestVo {
*/
private String categoryName;
/**
* 商品额外的属性
*/
private List<CartGoods.CartGoodsExtra> extra;
/**
* 套餐固定商品
*/
private List<ComboxGoodsRequestVo> productComboList;
......@@ -83,6 +84,16 @@ public class MCoffeeAddGoodsRequestVo {
*/
private List<ComboxGoodsRequestVo> productGroupList;
/**
* 加料
*/
private List<MaterialRequestVo> productMaterialList;
/**
* 麦咖啡定制属性
*/
private List<CartGoods.SpecialExtra> specialExtra;
private String appType;
......
......@@ -2,6 +2,8 @@ package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.ProductBaseResponse;
import cn.freemud.entities.dto.RequiredProductRequest;
import cn.freemud.entities.dto.product.ValiadShopProductResponse;
import cn.freemud.entities.dto.product.ValidateShopProductRequest;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -29,4 +31,8 @@ public interface ProductClient {
@PostMapping({"/Shop/ListMenuMustProduct"})
ProductBaseResponse<List<String>> getRequiredProductList(@RequestBody RequiredProductRequest request);
@PostMapping({"/Shop/ValidateShopProduct/Reason"})
ProductBaseResponse<ValiadShopProductResponse> validateShopProductAboutReason(@RequestBody ValidateShopProductRequest request);
}
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