Commit 22bab378 by zhiheng.zhang

Merge remote-tracking branch 'origin/qa' into qa

parents 50c97d5e 070bb6c2
package com.freemud.sdk.api.assortment.shoppingcart.adapter; package com.freemud.sdk.api.assortment.shoppingcart.adapter;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.ErrorLog; import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO; import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.application.sdk.api.productcenter.request.product.valid.ProductAttributeValueType; import com.freemud.application.sdk.api.productcenter.request.product.valid.ProductAttributeValueType;
import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductRequest; import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductRequest;
...@@ -11,6 +14,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods; ...@@ -11,6 +14,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoodsStates; import com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoodsStates;
import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest; import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.request.GetProductInfoRequest; import com.freemud.sdk.api.assortment.shoppingcart.request.GetProductInfoRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
...@@ -32,6 +36,7 @@ import java.util.stream.Collectors; ...@@ -32,6 +36,7 @@ import java.util.stream.Collectors;
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的 * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/ */
@Component @Component
@Slf4j
public class ShoppingCartAdapter { public class ShoppingCartAdapter {
private static final String ATTRIBUTEID = "attributeId"; private static final String ATTRIBUTEID = "attributeId";
private static final String ATTRIBUTENAME = "attributeName"; private static final String ATTRIBUTENAME = "attributeName";
...@@ -258,6 +263,7 @@ public class ShoppingCartAdapter { ...@@ -258,6 +263,7 @@ public class ShoppingCartAdapter {
* @param productBeans 购物车中所有的productId对应的商品详情 * @param productBeans 购物车中所有的productId对应的商品详情
*/ */
public void updateCartGoodsInfoNew(CartGoods cartGoods, List<ProductBeanDTO> productBeans) { public void updateCartGoodsInfoNew(CartGoods cartGoods, List<ProductBeanDTO> productBeans) {
log.info("【updateCartGoodsInfoNew】: cartGoods: {}, productBeans: {} ,trackingNo:{}", JSONObject.toJSONString(cartGoods), JSONObject.toJSONString(productBeans), LogThreadLocal.getTrackingNo());
try { try {
Optional<ProductBeanDTO> firstProduct = productBeans.stream().filter(p -> ObjectUtils.equals(p.getPid(), cartGoods.getSpuId())).findFirst(); Optional<ProductBeanDTO> firstProduct = productBeans.stream().filter(p -> ObjectUtils.equals(p.getPid(), cartGoods.getSpuId())).findFirst();
if (!firstProduct.isPresent()) { if (!firstProduct.isPresent()) {
......
...@@ -24,6 +24,8 @@ public class CartParamDto { ...@@ -24,6 +24,8 @@ public class CartParamDto {
private String sessionId; private String sessionId;
private String couponCode;
private String userId; private String userId;
private String storeId; private String storeId;
...@@ -34,8 +36,6 @@ public class CartParamDto { ...@@ -34,8 +36,6 @@ public class CartParamDto {
private String cartGoodsUid; private String cartGoodsUid;
private String couponCode;
private Integer qty; private Integer qty;
private MealClearOperationEnum operationType; private MealClearOperationEnum operationType;
......
...@@ -38,6 +38,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest; ...@@ -38,6 +38,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.request.GetProductInfoRequest; import com.freemud.sdk.api.assortment.shoppingcart.request.GetProductInfoRequest;
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil; import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils; import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -246,27 +247,36 @@ public interface ShoppingCartBaseService { ...@@ -246,27 +247,36 @@ public interface ShoppingCartBaseService {
List<String> notFoundSpu = new ArrayList<>(); List<String> notFoundSpu = new ArrayList<>();
List<String> changePriceSpu = new ArrayList<>(); List<String> changePriceSpu = new ArrayList<>();
for (int i = 0; i < validateResult.getFailureList().size(); i++) { for (int i = 0; i < validateResult.getFailureList().size(); i++) {
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
ValiadShopProductResult validaProduct = validateResult.getFailureList().get(i); ValiadShopProductResult validaProduct = validateResult.getFailureList().get(i);
for (CartGoods cartGoods : checkCartRequest.getCartGoodsList()) { for (CartGoods cartGoods : checkCartRequest.getCartGoodsList()) {
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
if (cartGoods.getSkuId().equals(validaProduct.getSkuId())) { if (cartGoods.getSkuId().equals(validaProduct.getSkuId())) {
String spuName = null == validaProduct.getProductType() ? cartGoods.getSpuName() : validaProduct.getProductType().getName(); String spuName = null == validaProduct.getProductType() ? (StringUtils.isNotEmpty(cartGoods.getSkuName()) ? cartGoods.getSkuName() :
StringUtils.isNotEmpty(cartGoods.getName()) ? cartGoods.getName() : "") : validaProduct.getProductType().getName();
if (PRODUCT_DOWN == validaProduct.getCode()) { if (PRODUCT_DOWN == validaProduct.getCode()) {
invalidSpu.add(spuName); if (StringUtils.isNotEmpty(spuName)){
invalidSpu.add(spuName);
}
cartGoodsStates.setHasInvalidGoods(true); cartGoodsStates.setHasInvalidGoods(true);
cartGoods.setCartGoodsUid(null); cartGoods.setCartGoodsUid(null);
break; break;
} }
if (PRODUCT_NOTFOUND == validaProduct.getCode()) { if (PRODUCT_NOTFOUND == validaProduct.getCode()) {
notFoundSpu.add(spuName); if (StringUtils.isNotEmpty(spuName)) {
notFoundSpu.add(spuName);
}
cartGoodsStates.setHasInvalidGoods(true); cartGoodsStates.setHasInvalidGoods(true);
cartGoods.setCartGoodsUid(null); cartGoods.setCartGoodsUid(null);
break; break;
} }
if (PRODUCT_PRICE_CHANGE == validaProduct.getCode()) { if (PRODUCT_PRICE_CHANGE == validaProduct.getCode()) {
changePriceSpu.add(spuName); if (StringUtils.isNotEmpty(spuName)) {
List<ProductBeanDTO> productList = validateResult.getFailureList().stream().map(ValiadShopProductResult::getProductType).collect(Collectors.toList()); changePriceSpu.add(spuName);
}
List<ProductBeanDTO> productList = validateResult.getFailureList().stream().filter(f-> f.getCode() == PRODUCT_PRICE_CHANGE).map(ValiadShopProductResult::getProductType).collect(Collectors.toList());
shoppingCartAdapter.updateCartGoodsInfoNew(cartGoods, productList); shoppingCartAdapter.updateCartGoodsInfoNew(cartGoods, productList);
break;
} }
} }
} }
...@@ -283,7 +293,6 @@ public interface ShoppingCartBaseService { ...@@ -283,7 +293,6 @@ public interface ShoppingCartBaseService {
if (CollectionUtils.isNotEmpty(changePriceSpu)){ if (CollectionUtils.isNotEmpty(changePriceSpu)){
toastMsg = toastMsg.concat(CART_PRODUCT_PRICE_CHANGE.replace("$spuName",StringUtils.join(changePriceSpu,","))); toastMsg = toastMsg.concat(CART_PRODUCT_PRICE_CHANGE.replace("$spuName",StringUtils.join(changePriceSpu,",")));
} }
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(toastMsg); checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(toastMsg);
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE); setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
...@@ -1027,4 +1036,8 @@ public interface ShoppingCartBaseService { ...@@ -1027,4 +1036,8 @@ public interface ShoppingCartBaseService {
} }
return null; return null;
} }
} }
...@@ -201,7 +201,7 @@ public class DeliveryAdapter { ...@@ -201,7 +201,7 @@ public class DeliveryAdapter {
ProductInfo deliveryComboProductInfo = new ProductInfo(); ProductInfo deliveryComboProductInfo = new ProductInfo();
deliveryComboProductInfo.setProductCode(comboProduct.getProductId()); deliveryComboProductInfo.setProductCode(comboProduct.getProductId());
deliveryComboProductInfo.setProductName(comboProduct.getProductName()); deliveryComboProductInfo.setProductName(comboProduct.getProductName());
deliveryComboProductInfo.setProductNumber(comboProduct.getNumber()); deliveryComboProductInfo.setProductNumber(comboProduct.getNumber()/productList.getNumber());
deliveryComboProductInfo.setProductPrice(comboProduct.getSalePrice().intValue()); deliveryComboProductInfo.setProductPrice(comboProduct.getSalePrice().intValue());
//餐道使用 //餐道使用
deliveryComboProductInfo.setCumulatedTotal(comboProduct.getNumber() * comboProduct.getSalePrice().intValue()); deliveryComboProductInfo.setCumulatedTotal(comboProduct.getNumber() * comboProduct.getSalePrice().intValue());
......
...@@ -167,7 +167,12 @@ public class OrderAdapter { ...@@ -167,7 +167,12 @@ public class OrderAdapter {
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto : cartGoodsDetailDtos) { for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto : cartGoodsDetailDtos) {
Integer qty = cartGoodsDetailDto.getQty(); Integer qty = cartGoodsDetailDto.getQty();
if (qty > 0) { if (qty > 0) {
CreateOrderProductRequest createOrderProductDto = convent2OrderProduct(cartGoodsDetailDto); CreateOrderProductRequest createOrderProductDto = null;
if(mcCafePartnerId.equals(createOrderDto.getCompanyId())) {
createOrderProductDto = convent2MCCafeOrderProduct(cartGoodsDetailDto);
} else {
createOrderProductDto = convent2OrderProduct(cartGoodsDetailDto);
}
createOrderProductDto.setIgnoreProductPrice(1); createOrderProductDto.setIgnoreProductPrice(1);
products.add(createOrderProductDto); products.add(createOrderProductDto);
if (CollectionUtils.isNotEmpty(cartGoodsDetailDto.getActivityDiscountsDtos())) { if (CollectionUtils.isNotEmpty(cartGoodsDetailDto.getActivityDiscountsDtos())) {
...@@ -2144,6 +2149,30 @@ public class OrderAdapter { ...@@ -2144,6 +2149,30 @@ public class OrderAdapter {
return createOrderProductDemoDto; return createOrderProductDemoDto;
} }
public CreateOrderProductRequest convent2MCCafeOrderProduct(ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto) {
CreateOrderProductRequest createOrderProductDemoDto = convent2MCCafeOrderProductDemo(cartGoodsDetailDto);
//套餐
if (cartGoodsDetailDto.getProductType() != null && (cartGoodsDetailDto.getProductType() == ProductType.SETMEALPRODUCT.getCode() || cartGoodsDetailDto.getProductType() == ProductType.SETMEALPRODUCT_UPPRICE.getCode())) {
List<CreateOrderProductRequest> comboProducts = new ArrayList<>();
cartGoodsDetailDto.getComboProducts().forEach(product -> {
comboProducts.add(convent2OrderProductDemo(product));
});
createOrderProductDemoDto.setComboProduct(comboProducts);
}
//加料商品
if (cartGoodsDetailDto.getProductType() != null && (cartGoodsDetailDto.getProductType() == ProductType.MATERIALPRODUCT_UPPRICE.getCode())) {
List<CreateOrderProductRequest> materialProducts = new ArrayList<>();
cartGoodsDetailDto.getMaterialList().forEach(product -> {
materialProducts.add(convent2OrderProductMaterial(product));
});
createOrderProductDemoDto.setMaterialProduct(materialProducts);
}
createOrderProductDemoDto.setProductType(cartGoodsDetailDto.getProductType());
return createOrderProductDemoDto;
}
private CreateOrderProductRequest convent2OrderProductMaterial(ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto) { private CreateOrderProductRequest convent2OrderProductMaterial(ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto) {
CreateOrderProductRequest createOrderProductDemoDto = new CreateOrderProductRequest(); CreateOrderProductRequest createOrderProductDemoDto = new CreateOrderProductRequest();
createOrderProductDemoDto.setProductId(cartGoodsDetailDto.getSpuId()); createOrderProductDemoDto.setProductId(cartGoodsDetailDto.getSpuId());
...@@ -2203,6 +2232,35 @@ public class OrderAdapter { ...@@ -2203,6 +2232,35 @@ public class OrderAdapter {
return createOrderProductDemoDto; return createOrderProductDemoDto;
} }
public CreateOrderProductRequest convent2MCCafeOrderProductDemo(ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto) {
CreateOrderProductRequest createOrderProductDemoDto = new CreateOrderProductRequest();
createOrderProductDemoDto.setProductId(cartGoodsDetailDto.getSpuId());
createOrderProductDemoDto.setProductName(cartGoodsDetailDto.getSpuName());
createOrderProductDemoDto.setSpecification(cartGoodsDetailDto.getSkuId());
createOrderProductDemoDto.setSpecificationName(cartGoodsDetailDto.getSkuName());
createOrderProductDemoDto.setPrice(0l);
createOrderProductDemoDto.setSalePrice(cartGoodsDetailDto.getOriginalPrice());
createOrderProductDemoDto.setTotalDiscountAmount(cartGoodsDetailDto.getTotalDiscountAmount() == null ? 0 : cartGoodsDetailDto.getTotalDiscountAmount().longValue());
createOrderProductDemoDto.setNumber(cartGoodsDetailDto.getQty());
createOrderProductDemoDto.setPicture(cartGoodsDetailDto.getPicture());
createOrderProductDemoDto.setAddInfo(cartGoodsDetailDto.getAttributeNames());
createOrderProductDemoDto.setDiscountId(cartGoodsDetailDto.getCouponCode());
createOrderProductDemoDto.setProductType(cartGoodsDetailDto.getProductType());
createOrderProductDemoDto.setParentProductId(cartGoodsDetailDto.getParentProductId());
createOrderProductDemoDto.setIsFixedProduct(cartGoodsDetailDto.getIsFixedProduct());
createOrderProductDemoDto.setCustomerCode(cartGoodsDetailDto.getCustomerCode());
createOrderProductDemoDto.setProductCode(cartGoodsDetailDto.getProductCode());
createOrderProductDemoDto.setHasStockProudct(cartGoodsDetailDto.isStockLimit());
createOrderProductDemoDto.setWeight(cartGoodsDetailDto.getWeight());
createOrderProductDemoDto.setUnit(cartGoodsDetailDto.getUnit());
createOrderProductDemoDto.setStapleFood(0);
createOrderProductDemoDto.setTax(cartGoodsDetailDto.getTax());
createOrderProductDemoDto.setTaxId(cartGoodsDetailDto.getTaxId());
createOrderProductDemoDto.setClassificationId(cartGoodsDetailDto.getClassificationId());
createOrderProductDemoDto.setClassificationName(cartGoodsDetailDto.getClassificationName());
return createOrderProductDemoDto;
}
/** /**
* 将促销的枚举 ActivityTypeEnum 和orderAccountType 关联映射 * 将促销的枚举 ActivityTypeEnum 和orderAccountType 关联映射
*/ */
......
package cn.freemud.service.impl; package cn.freemud.service.impl;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.OrderAffirmRequestVO; import cn.freemud.entities.vo.OrderAffirmRequestVO;
import cn.freemud.entities.vo.PaysuccessNoticeMessage; import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.utils.ValidationCode; import cn.freemud.utils.ValidationCode;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
...@@ -24,6 +30,9 @@ public class MallOrderServiceImplTest { ...@@ -24,6 +30,9 @@ public class MallOrderServiceImplTest {
@Autowired @Autowired
private MallOrderServiceImpl mallOrderService; private MallOrderServiceImpl mallOrderService;
@Autowired
private MCCafeOrderServiceImpl mcCafeOrderService;
@Before @Before
public void before() throws Exception { public void before() throws Exception {
...@@ -33,6 +42,14 @@ public class MallOrderServiceImplTest { ...@@ -33,6 +42,14 @@ public class MallOrderServiceImplTest {
public void after() throws Exception { public void after() throws Exception {
} }
@Test
public void f1() {
mcCafeOrderService.createOrder(JSON.parseObject("{\"channelType\":\"saas\",\"couponCode\":\"\",\"menuType\":\"saasdelivery\",\"needInvoice\":0,\"needTableware\":0,\"orderRemark\":\"\",\"orderType\":2,\"partnerId\":\"1206\",\"payChannelType\":1,\"receiveId\":\"3599568180562003060\",\"sessionId\":\"c4377678dbcbd6cdf6e7df86ea112b6f82723023\",\"shopId\":\"1450026\",\"takeMealFlag\":\"0\"}", CreateOrderVo.class),
new StoreResponse.BizVO(),
JSON.parseObject("{\"activityDiscountsDtos\":[],\"deliveryAmount\":10,\"discountDeliveryAmount\":10,\"isDiscountDelivery\":false,\"originalTotalAmount\":4400,\"packageAmount\":0,\"products\":[{\"activityDiscountsDtos\":[],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"cartGoodsUid\":\"eb8c7260-8ecb-44d1-9234-8d8bed0b0875\",\"classificationId\":\"\",\"classificationName\":\"\",\"comboProducts\":[{\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"customerCode\":\"501642\",\"extraList\":[],\"hasProductCoupon\":false,\"isFixedProduct\":false,\"materialList\":[],\"originalPrice\":1700,\"parentProductId\":\"184437853099519288\",\"picture\":\"https://picture.sandload.cn/1598678546485.png\",\"productType\":6,\"qty\":2,\"skuId\":\"184437494035639613\",\"skuName\":\"中杯热美式\",\"spuId\":\"184437494035639613\",\"spuName\":\"中杯热美式\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0},{\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"customerCode\":\"901290\",\"extraList\":[],\"hasProductCoupon\":false,\"isFixedProduct\":false,\"materialList\":[],\"originalPrice\":500,\"parentProductId\":\"184437853099519288\",\"picture\":\"https://picture.sandload.cn/1598677404074.png\",\"productType\":6,\"qty\":2,\"skuId\":\"184436294373469463\",\"skuName\":\"经典芝士蛋糕\",\"spuId\":\"184436294373469463\",\"spuName\":\"经典芝士蛋糕\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0}],\"customerCode\":\"901280\",\"extraList\":[],\"hasProductCoupon\":false,\"materialList\":[],\"originalPrice\":4400,\"picture\":\"https://picture.sandload.cn/1598678861518.png\",\"productCode\":\"901280\",\"productType\":6,\"qty\":2,\"salePrice\":4400,\"skuId\":\"184437853099519288\",\"skuName\":\"早餐啡常搭\",\"spuId\":\"184437853099519288\",\"spuName\":\"早餐啡常搭\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0}],\"shareDiscountActivityDtos\":[],\"totalAmount\":4400,\"totalDiscountAmount\":0}", ShoppingCartGoodsDto.class),
new OrderExtendedReq(),
OrderClientType.SAAS,"www");
}
@Test @Test
public void testPaySuccess() { public void testPaySuccess() {
......
...@@ -57,6 +57,7 @@ public class MCoffeeShoppingCartController { ...@@ -57,6 +57,7 @@ public class MCoffeeShoppingCartController {
return shoppingCartMCoffeeService.updateGoodsQty(request); return shoppingCartMCoffeeService.updateGoodsQty(request);
} }
/** /**
* 查询购物车信息 * 查询购物车信息
*/ */
......
package cn.freemud.entities.dto;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OpenPlatformPartnerWxappConfig
* @Package cn.freemud.entities.dto
* @Description:
* @author: ping1.wu
* @date: 2020/9/15 15:59
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class OpenPlatformPartnerWxappConfig {
private String wxAppid;
private String appKey;
private String appValue;
private Integer state;
}
package cn.freemud.entities.dto.calculate;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Objects;
@Data
public class CalculationSharingDiscountRequestDto {
/**
* 区域
*/
private String area;
/**
* 可用渠道
*/
private String channel;
/**
* 绑定的小程序id
*/
private String appId;
/**
* i应用传isaas,快中台传fast
*/
private String application = "isaas";
/**
* 是否展示活动列表 0:默认,不展示 1:展示
*/
private Integer isShowActivities;
/**
* 是否显示商品的活动信息 0:默认,不展示 1:展示
*/
private Integer isShowGoodsActivity;
/**
* 商户
*/
private String partnerCode;
/**
* 门店
*/
private String storeId;
/**
* 门店的组织机构树
*/
private List<String> orgIds;
/**
* 用户id(有优惠券时,该字段必传)
*/
private String userId;
/**
* 版本号
*/
private Integer ver;
/**
* 优惠券集合
*/
private List<CalculationDiscountCoupon> coupons;
/**
* 商品集合
*/
private List<CalculationDiscountGoods> goods;
/**
* 已选换购活动集合
*/
private List<CalculationActivityReqVO> selectActivityList;
private Long distributionFee;
/**
* 是否是会员
*/
private Boolean isMember;
@Data
public static class CalculationDiscountCoupon {
/**
* 优惠券码
*/
private String code;
/**
* 活动号
*/
private String activityCode;
}
@Data
public static class CalculationDiscountGoods {
/**
* 商品ID
*/
private String goodsId;
/**
* 购物车行uid
*/
private String cartGoodsUid;
/**
* 商品品类
*/
private String category;
/**
* 商品数量
*/
private Integer goodsQuantity;
/**
* 原价(分)
*/
private Long originalPrice;
/**
* 折扣比例
* 例如8折为80
*/
private Integer memberDiscount;
/**
* 加料
*/
private List<Material> smallMaterial;
private String spuId;
/**
* 套餐固定商品组
*/
private List<GroupCombox> groupCombox;
/**
* 是否计算套餐
*/
private boolean meal = false;
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
CalculationDiscountGoods that = (CalculationDiscountGoods) o;
return Objects.equals(goodsId, that.goodsId) &&
Objects.equals(category, that.category) &&
Objects.equals(cartGoodsUid, that.cartGoodsUid) &&
Objects.equals(originalPrice, that.originalPrice);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), goodsId, category, originalPrice);
}
@Data
@NoArgsConstructor
/**
* 商品小料
*/
static public class Material {
/**
* 加料商品ID
*/
private String goodsId;
/**
* 加料数量
*/
private Integer goodsQuantity;
/**
* 加料单价
*/
private Long originalPrice;
/**
* 1 :小料、2:可选搭配
*/
private int type;
}
/**
* 套餐固定商品组
*/
@Data
@NoArgsConstructor
static public class GroupCombox {
/**
* 商品Id
*/
private String goodsId;
/**
* 商品数量
*/
private Integer goodsQuantity;
/**
* 商品原价
*/
private Integer originalPrice;
}
}
@Data
@NoArgsConstructor
public static class CalculationActivityReqVO {
private String activityCode;
private Integer activityType = 81;
private List<CalculationSendGoodsReqVO> sendGoods;
}
@Data
@NoArgsConstructor
public static class CalculationSendGoodsReqVO {
private String goodsId;
private Integer goodsQuantity;
private Integer originalPrice;
private Integer nowPrice;
}
}
\ No newline at end of file
...@@ -124,6 +124,7 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV ...@@ -124,6 +124,7 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
* 配送费为零的原因:0:正常,1:超出配送范围 * 配送费为零的原因:0:正常,1:超出配送范围
*/ */
private Integer deliveryFeeZeroReason; private Integer deliveryFeeZeroReason;
private Integer version;
/** /**
* 代金券 * 代金券
......
...@@ -101,6 +101,7 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo { ...@@ -101,6 +101,7 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
*/ */
@NotNull @NotNull
private Integer qty; private Integer qty;
private String activityCode;
} }
@Data @Data
......
...@@ -71,7 +71,7 @@ public interface CouponService { ...@@ -71,7 +71,7 @@ public interface CouponService {
* @param cartGoods * @param cartGoods
* @return * @return
*/ */
ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType); ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType, int isNew);
/** /**
* 获取卡券服务商户密钥 * 获取卡券服务商户密钥
......
...@@ -187,8 +187,6 @@ public class AssortmentSdkService { ...@@ -187,8 +187,6 @@ public class AssortmentSdkService {
return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CartGoods.class); return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CartGoods.class);
} }
/** /**
* 调用SDK校验购物车 * 调用SDK校验购物车
* *
...@@ -210,6 +208,34 @@ public class AssortmentSdkService { ...@@ -210,6 +208,34 @@ public class AssortmentSdkService {
checkCartRequest.setTrackingNo(LogThreadLocal.getTrackingNo()); checkCartRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
checkCartRequest.setMenuType(BusinessTypeEnum.getByType(menuType).getCode()); checkCartRequest.setMenuType(BusinessTypeEnum.getByType(menuType).getCode());
BaseResponse<CheckCartRequest> baseResponse ; BaseResponse<CheckCartRequest> baseResponse ;
baseResponse= shoppingCartService.checkAllCartGoodsNew(checkCartRequest);
if (baseResponse == null) {
return null;
}
return baseResponse.getResult();
}
/**
* 调用SDK校验购物车
*
* @param oldAllCartGoodsList
* @param partnerId
* @param storeId
* @param shoppingCartGoodsResponseVo
* @param orderType
*/
public CheckCartRequest checkShoppingCartSdkForMCoffee(List<CartGoods> oldAllCartGoodsList, String partnerId, String storeId, ShoppingCartGoodsBaseResponseVo shoppingCartGoodsResponseVo
, Integer orderType, String tableNumber, String menuType ,ShoppingCartBaseService shoppingCartService) {
CheckCartRequest checkCartRequest = new CheckCartRequest();
checkCartRequest.setCartGoodsList(JSONArray.parseArray(JSONObject.toJSONString(oldAllCartGoodsList), com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods.class));
checkCartRequest.setOrderWay(orderType);
checkCartRequest.setPartnerId(partnerId);
checkCartRequest.setShoppingCartGoodsResponseVo(JSONObject.parseObject(JSONObject.toJSONString(shoppingCartGoodsResponseVo), com.freemud.sdk.api.assortment.shoppingcart.domain.ShoppingCartGoodsResponseVo.class));
checkCartRequest.setStoreId(storeId);
checkCartRequest.setTableNumber(tableNumber);
checkCartRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
checkCartRequest.setMenuType(BusinessTypeEnum.getByType(menuType).getCode());
BaseResponse<CheckCartRequest> baseResponse ;
baseResponse= shoppingCartService.checkAllCartGoodsForMCoffee(checkCartRequest); baseResponse= shoppingCartService.checkAllCartGoodsForMCoffee(checkCartRequest);
if (baseResponse == null) { if (baseResponse == null) {
return null; return null;
...@@ -255,4 +281,4 @@ public class AssortmentSdkService { ...@@ -255,4 +281,4 @@ public class AssortmentSdkService {
cartParamDto.setStoreId(storeId); cartParamDto.setStoreId(storeId);
return cartParamDto; return cartParamDto;
} }
} }
\ No newline at end of file
...@@ -57,7 +57,7 @@ public class CouponPromotionService implements IPromotionService { ...@@ -57,7 +57,7 @@ public class CouponPromotionService implements IPromotionService {
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods); boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
// 构建可用不可用优惠券 // 构建可用不可用优惠券
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList, couponPromotionVO.getPartnerId() ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList, couponPromotionVO.getPartnerId()
, couponPromotionVO.getUserId(), couponPromotionVO.getStoreId(), couponPromotionVO.getCouponCode(), hasGoodssCoupon, couponPromotionVO.getOrderType()); , couponPromotionVO.getUserId(), couponPromotionVO.getStoreId(), couponPromotionVO.getCouponCode(), hasGoodssCoupon, couponPromotionVO.getOrderType(), 0);
if (Objects.equals(activityClassifyCouponBean, null)) { if (Objects.equals(activityClassifyCouponBean, null)) {
// 构建一个空得订单券信息 // 构建一个空得订单券信息
activityClassifyCouponBean = createEmptyActivityCouponBean(); activityClassifyCouponBean = createEmptyActivityCouponBean();
......
...@@ -373,8 +373,14 @@ public class CouponServiceImpl implements CouponService { ...@@ -373,8 +373,14 @@ public class CouponServiceImpl implements CouponService {
} }
@Override @Override
public ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId public ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods
, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType) { , String partnerId
, String userId
, String storeId
, String couponCode
, boolean hasGoodsCoupon
, Integer orderType
, int isNew) {
GetMemberCouponListRequestDto getMemberCouponListRequestDto = new GetMemberCouponListRequestDto(partnerId, userId); GetMemberCouponListRequestDto getMemberCouponListRequestDto = new GetMemberCouponListRequestDto(partnerId, userId);
getMemberCouponListRequestDto.setStatusFlags(Arrays.asList(CouponStatus.STATUS_0.getCode())); getMemberCouponListRequestDto.setStatusFlags(Arrays.asList(CouponStatus.STATUS_0.getCode()));
getMemberCouponListRequestDto.setPageNum(1); getMemberCouponListRequestDto.setPageNum(1);
...@@ -413,14 +419,14 @@ public class CouponServiceImpl implements CouponService { ...@@ -413,14 +419,14 @@ public class CouponServiceImpl implements CouponService {
} }
} }
}); });
List<CouponStateVo> couponStateList = buildAvailiableCoupons(cartGoods, partnerId, storeId, couponCodes); List<CouponStateVo> couponStateList = buildAvailiableCoupons(cartGoods, partnerId, storeId, couponCodes, isNew);
if (CollectionUtils.isNotEmpty(couponStateList)) { if (CollectionUtils.isNotEmpty(couponStateList)) {
return returnSuccessAvailiableCoupons(couponCode, hasGoodsCoupon, availableCouponResponseVo, usableCoupons, disableCoupons, memberCouponMap, couponStateList); return returnSuccessAvailiableCoupons(couponCode, hasGoodsCoupon, availableCouponResponseVo, usableCoupons, disableCoupons, memberCouponMap, couponStateList);
} }
return null; return null;
} }
private List<CouponStateVo> buildAvailiableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes) { private List<CouponStateVo> buildAvailiableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes, int isNew) {
String appSecret = getAppSecret(partnerId); String appSecret = getAppSecret(partnerId);
// 最大15一提交 // 最大15一提交
int maxNum = 15; int maxNum = 15;
...@@ -433,7 +439,7 @@ public class CouponServiceImpl implements CouponService { ...@@ -433,7 +439,7 @@ public class CouponServiceImpl implements CouponService {
List<Product> productList = Lists.newArrayList(); List<Product> productList = Lists.newArrayList();
// 优惠券优先级最高,根据商品原价做计算 // 优惠券优先级最高,根据商品原价做计算
// 订单金额 // 订单金额
Long totalAmount = createProductRequest(cartGoods, productList); Long totalAmount = createProductRequest(cartGoods, productList, isNew);
couponAvailableReqVo.setTotalAmount(Integer.valueOf(totalAmount + "")); couponAvailableReqVo.setTotalAmount(Integer.valueOf(totalAmount + ""));
couponAvailableReqVo.setProductList(productList); couponAvailableReqVo.setProductList(productList);
couponAvailableReqVo.setChannelCodeList(commonService.getOrgCodes(partnerId, storeId)); couponAvailableReqVo.setChannelCodeList(commonService.getOrgCodes(partnerId, storeId));
...@@ -543,37 +549,62 @@ public class CouponServiceImpl implements CouponService { ...@@ -543,37 +549,62 @@ public class CouponServiceImpl implements CouponService {
return availableCouponResponseVo; return availableCouponResponseVo;
} }
private Long createProductRequest(List<CartGoods> cartGoods, List<Product> productList) { private Long createProductRequest(List<CartGoods> cartGoods, List<Product> productList, int isNew) {
Long totalAmount = 0L; Long totalAmount = 0L;
for (CartGoods cartGood : cartGoods) {
// 剔除商品券得商品 if (isNew == 1) {
if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId())) { for (CartGoods cartGood : cartGoods) {
continue; // 剔除商品券得商品
} if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId())) {
Product product = new Product(); continue;
product.setProductId(StringUtils.isEmpty(cartGood.getSkuId()) ? cartGood.getSpuId() : cartGood.getSkuId()); }
// 普通商品价格 Product product = new Product();
product.setAmount(Integer.valueOf(cartGood.getOriginalPrice() + "")); product.setProductId(StringUtils.isEmpty(cartGood.getSkuId()) ? cartGood.getSpuId() : cartGood.getSkuId());
// 套餐价格为: 套餐价+可选商品总价格 // 普通商品价格
if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGood.getGoodsType())) { product.setAmount(cartGood.getAmount().intValue());
Long finalPrice = cartGood.getFinalPrice(); totalAmount = totalAmount + cartGood.getAmount();
if (CollectionUtils.isNotEmpty(cartGood.getProductGroupList())) { // todo :小料价格累加到主商品上
finalPrice += cartGood.getProductGroupList().stream().mapToLong(group -> group.getFinalPrice() * group.getQty()).sum(); if (CollectionUtils.isNotEmpty(cartGood.getProductMaterialList())) {
for (CartGoods.MaterialGoods materialGoods : cartGood.getProductMaterialList()) {
product.setAmount(product.getAmount() + materialGoods.getAmount().intValue());
totalAmount = totalAmount + materialGoods.getAmount();
}
} }
product.setAmount(finalPrice.intValue()); // 数量
product.setQuantity(cartGood.getQty());
productList.add(product);
} }
} else {
for (CartGoods cartGood : cartGoods) {
// 剔除商品券得商品
if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId())) {
continue;
}
Product product = new Product();
product.setProductId(StringUtils.isEmpty(cartGood.getSkuId()) ? cartGood.getSpuId() : cartGood.getSkuId());
// 普通商品价格
product.setAmount(Integer.valueOf(cartGood.getOriginalPrice() + ""));
// 套餐价格为: 套餐价+可选商品总价格
if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGood.getGoodsType())) {
Long finalPrice = cartGood.getFinalPrice();
if (CollectionUtils.isNotEmpty(cartGood.getProductGroupList())) {
finalPrice += cartGood.getProductGroupList().stream().mapToLong(group -> group.getFinalPrice() * group.getQty()).sum();
}
product.setAmount(finalPrice.intValue());
}
totalAmount = totalAmount + product.getAmount() * cartGood.getQty(); totalAmount = totalAmount + product.getAmount() * cartGood.getQty();
// todo :小料价格累加到主商品上 // todo :小料价格累加到主商品上
if (CollectionUtils.isNotEmpty(cartGood.getProductMaterialList())) { if (CollectionUtils.isNotEmpty(cartGood.getProductMaterialList())) {
for (CartGoods.MaterialGoods materialGoods : cartGood.getProductMaterialList()) { for (CartGoods.MaterialGoods materialGoods : cartGood.getProductMaterialList()) {
product.setAmount(product.getAmount() + Integer.valueOf(materialGoods.getOriginalPrice() + "")); product.setAmount(product.getAmount() + Integer.valueOf(materialGoods.getOriginalPrice() + ""));
totalAmount = totalAmount + materialGoods.getOriginalPrice() * cartGood.getQty(); totalAmount = totalAmount + materialGoods.getOriginalPrice() * cartGood.getQty();
}
} }
// 数量
product.setQuantity(cartGood.getQty());
productList.add(product);
} }
// 数量
product.setQuantity(cartGood.getQty());
productList.add(product);
} }
return totalAmount; return totalAmount;
} }
......
package cn.freemud.service.impl.calculate;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.service.impl.calculate CalculateCenter
* @Description: TDO 描述....
* @author: family
* @date: 2020/9/22
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CalculateCenter {
/**
* 1 增量,2,全量
*/
private Integer type;
/**
* 商户
*/
private String partnerId;
/**
* 门店
*/
private String storeId;
/**
* 是否启用新的算价中心
*/
private Boolean enable;
}
package cn.freemud.service.impl.calculate;
import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CouponPromotionVO;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.service.impl.calculate.promotion.*;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.service.impl.calculate CalculationSharingCartService
* @Description: TDO 描述....
* @author: family
* @date: 2020/9/7
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
@Slf4j
public class CalculationSharingCartService {
@Autowired
private CouponSharingService promotionSharingService;
@Autowired
private FullSharingService fullSharingService;
@Autowired
private ScoreSharingService scoreSharingService;
@Autowired
private DeliverySharingService deliverySharingService;
@Autowired
private GiftSharingService giftSharingService;
@Autowired
private AdditionSharingService additionSharingService;
@Autowired
private CalculationCommonService calculationCommonService;
/**
* 响应购物车价格计算依赖促销
*/
public void distribute(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsList
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo
, UserLoginInfoDto userLoginInfoDto
, CouponPromotionVO couponPromotionVO
, ActivityQueryDto activityQueryDto
, String menuType
, Long deliveryAmount
, String opt) {
/**
* 用促销价格初始化购物车行记录成交价
*/
calculationCommonService.initShoppingCart(discountResult, cartGoodsList, shoppingCartGoodsResponseVo);
/**
* 可用券及券折扣
*/
promotionSharingService.updateShoppingCartGoodsDiscount(discountResult, cartGoodsList, shoppingCartGoodsResponseVo, couponPromotionVO);
/**
* 满减处理
*/
fullSharingService.fullResponse(discountResult,cartGoodsList,shoppingCartGoodsResponseVo,activityQueryDto);
/**
* 买赠
*/
giftSharingService.giftResponse(discountResult, cartGoodsList, shoppingCartInfoRequestVo, activityQueryDto);
/**
* 加价购
*/
additionSharingService.additionResponse(discountResult,cartGoodsList,shoppingCartGoodsResponseVo,shoppingCartInfoRequestVo);
/**
* 积分抵扣
*/
scoreSharingService.scoreResponse(discountResult, shoppingCartGoodsResponseVo, userLoginInfoDto, shoppingCartInfoRequestVo);
if (BusinessTypeEnum.SAAS_DELIVERY.getCode().equals(menuType)) {
deliverySharingService.deliveryResponse(discountResult, activityQueryDto, shoppingCartGoodsResponseVo, deliveryAmount);
}
/**
* 特价类型超出部分提示
*/
calculationCommonService.drawSurpassDiscountInfo(discountResult, shoppingCartGoodsResponseVo);
if (ShoppingCartConstant.ADD_AND_UPDATE.equals(opt)) {
calculationCommonService.setAddAndUpdateResponse(cartGoodsList, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo, ShoppingCartConstant.ADD_AND_UPDATE);
} else if (ShoppingCartConstant.QUERY_INFO.equals(opt)) {
calculationCommonService.setAddAndUpdateResponse(cartGoodsList, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo, ShoppingCartConstant.QUERY_INFO);
calculationCommonService.addNeedCardAmount(shoppingCartInfoRequestVo, shoppingCartGoodsResponseVo);
}
}
}
package cn.freemud.service.impl.calculate;
import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.impl.calculate.promotion.GiftSharingService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.service.impl.calculate CalculationSharingEquallyService
* @Description: TDO 描述....
* @author: family
* @date: 2020/9/14
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class CalculationSharingEquallyService {
@Autowired
private CalculationCommonService calculationCommonService;
@Autowired
private GiftSharingService giftSharingService;
/**
* 均摊服务
* @param discountResult
* @param cartGoodsList
* @param shoppingCartGoodsResponseVo
* @param shoppingCartInfoRequestVo
* @param userLoginInfoDto
* @param couponPromotionVO
* @param activityQueryDto
* @param menuType
* @param deliveryAmount
* @param shoppingCartGoodsDto
* @param premiumExchangeActivity
*/
public void equally(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsList
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo
, UserLoginInfoDto userLoginInfoDto
, CouponPromotionVO couponPromotionVO
, ActivityQueryDto activityQueryDto
, String menuType
, Long deliveryAmount
, ShoppingCartGoodsDto shoppingCartGoodsDto
, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity) {
calculationCommonService.initShoppingCart(discountResult, cartGoodsList, shoppingCartGoodsResponseVo);
List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtoList = CollectionUtils.isEmpty(shoppingCartGoodsDto.getProducts()) ? new ArrayList<>() : shoppingCartGoodsDto.getProducts();
shoppingCartGoodsDto.setProducts(cartGoodsDetailDtoList);
this.setShoppingCartGoodsDtoActivityDiscounts(discountResult, shoppingCartGoodsDto);
//过滤出加价购
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount> addMoneyDiscounts = discountResult.getDiscounts()
.stream()
.filter(discount -> ActivityTypeEnum.TYPE_81.getCode().equals(discount.getType())).collect(Collectors.toList());
if (null != discountResult) {
//处理加价购
List<SubtractStockVO> stocks = filterSendGoodsStocks(discountResult.getStocks(), shoppingCartInfoRequestVo, addMoneyDiscounts);
if (CollectionUtils.isNotEmpty(stocks)) shoppingCartGoodsDto.setStocks(stocks);
}
//总计价
shoppingCartGoodsDto.setPackageAmount(shoppingCartGoodsResponseVo.getNewPackAmount());
shoppingCartGoodsDto.setOriginalTotalAmount(shoppingCartGoodsResponseVo.getOriginalTotalAmount());
shoppingCartGoodsDto.setTotalAmount(shoppingCartGoodsResponseVo.getTotalAmount());
shoppingCartGoodsDto.setTotalDiscountAmount(shoppingCartGoodsResponseVo.getTotalDiscountAmount());
shoppingCartGoodsResponseVo.setProducts(cartGoodsList);
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> goods = discountResult.getGoods();
/**
* 利用促销赋值totalDiscountAmount
*/
for (CartGoods product : shoppingCartGoodsResponseVo.getProducts()) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods find = goods.stream().filter((k) -> k.getCartGoodsUid().equals(product.getCartGoodsUid())).findFirst().get();
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = calculationCommonService.convertCartGoods2DetailGoodsList(find, product);
cartGoodsDetailDtoList.add(cartGoodsDetailDto);
}
/**
* 赠品
*/
giftSharingService.equally(discountResult, cartGoodsDetailDtoList, activityQueryDto, menuType);
calculationCommonService.setAddAndUpdateResponse(cartGoodsList, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo, ShoppingCartConstant.QUERY_INFO);
calculationCommonService.addNeedCardAmount(shoppingCartInfoRequestVo, shoppingCartGoodsResponseVo);
}
/**
* 设置购物车整体享受的活动集合
*
* @param discountResult
* @param shoppingCartGoodsDto
*/
private void setShoppingCartGoodsDtoActivityDiscounts(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, ShoppingCartGoodsDto shoppingCartGoodsDto) {
List<ActivityDiscountsDto> activityDiscountsDtos = new ArrayList<>();
shoppingCartGoodsDto.setActivityDiscountsDtos(activityDiscountsDtos);
if (discountResult == null) return;
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount> discounts = discountResult.getDiscounts();
for (CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount discount : discounts) {
int discountAmount = (discount.getDiscount() == null) ? 0 : discount.getDiscount();
Integer discountType = discount.getType();
if (discountType != null && discountAmount > 0) {
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
activityDiscountsDto.setActivityCode(discount.getActivityCode());
activityDiscountsDto.setActivityName(discount.getActivityName());
activityDiscountsDto.setActivityType(discountType);
activityDiscountsDto.setDiscountAmount(0 - discountAmount);
activityDiscountsDtos.add(activityDiscountsDto);
}
}
shoppingCartGoodsDto.setActivityDiscountsDtos(activityDiscountsDtos);
}
/**
* 库存扣减加价购商品 要过滤掉没有换购的商品
*
* @param stocks 扣减库存
* @param shoppingCartInfoRequestVo 购物车请求信息
* @param addMoneyDiscounts 加价购活动
* @return 返回应该扣减的加价购商品库存
*/
private List<SubtractStockVO> filterSendGoodsStocks(List<SubtractStockVO> stocks
, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo
, List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount> addMoneyDiscounts) {
if (CollectionUtils.isEmpty(stocks) || CollectionUtils.isEmpty(addMoneyDiscounts)) {
return stocks;
}
List<SubtractStockVO> subtractStockVOs = stocks.stream().filter(subtractStockVO -> ActivityTypeEnum.TYPE_81.getCode().equals(subtractStockVO.getActivityType())).collect(Collectors.toList());
List<SubtractStockVO.SubtractStockGoodsVO> goodsStock = null;
if (CollectionUtils.isNotEmpty(subtractStockVOs)) {
SubtractStockVO subtractStockVO = subtractStockVOs.get(0);
goodsStock = subtractStockVO.getGoodsStock();
}
if (null == goodsStock) {
return stocks;
}
Map<String, SubtractStockVO.SubtractStockGoodsVO> mapSubstractStocks = new HashMap<>();
if (CollectionUtils.isNotEmpty(goodsStock)) {
mapSubstractStocks = goodsStock.stream().collect(Collectors.toMap(SubtractStockVO.SubtractStockGoodsVO::getGoodsId, Function.identity(), (k1, k2) -> k1));
}
//获取加价购商品
List<ShoppingCartInfoRequestVo.SendGoods> sendGoods = shoppingCartInfoRequestVo.getSendGoods();
if (CollectionUtils.isNotEmpty(sendGoods)) {
List<String> needSendGoodsId = sendGoods.stream().map(ShoppingCartInfoRequestVo.SendGoods::getGoodsId).collect(Collectors.toList());
goodsStock.clear();
for (String goodId : needSendGoodsId) {
SubtractStockVO.SubtractStockGoodsVO subtractStockGoodsVO = mapSubstractStocks.get(goodId);
if (null != mapSubstractStocks.get(goodId)) {
goodsStock.add(subtractStockGoodsVO);
}
}
} else {
return stocks.stream().filter(subtractStockVO -> !ActivityTypeEnum.TYPE_81.getCode().equals(subtractStockVO.getActivityType())).collect(Collectors.toList());
}
return stocks;
}
}
package cn.freemud.service.impl.calculate.promotion;
import cn.freemud.entities.dto.ActivityResponseDto;
import cn.freemud.entities.dto.BenefitBeanDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.ActivityService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;
import static cn.freemud.constant.ApplicationConstant.*;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.service.impl.calculate.promotion DelivierySharingService
* @Description: 满额减配送费用
* @author: family
* @date: 2020/9/9
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class DeliverySharingService {
@Autowired
private ActivityService activityService;
public void deliveryResponse(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, ActivityQueryDto activityQueryDto
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, Long deliveryAmount) {
DecimalFormat df = new DecimalFormat("###.##");
List<ActivityTypeEnum> activityTypeEnums = new LinkedList<>();
activityTypeEnums.add(ActivityTypeEnum.TYPE_14);
ActivityQueryResponseDto activityQueryResponseDto = activityService.queryActivityByType(activityQueryDto, activityTypeEnums, null);
ActivityResponseDto activityResponse =null;
BenefitBeanDto beanDto=null;
if (activityQueryResponseDto != null &&activityQueryResponseDto.getResult()!=null && activityQueryResponseDto.getResult().size()>0) {
activityResponse = activityQueryResponseDto.getResult().get(0);
shoppingCartGoodsResponseVo.setDiscountDeliveryActivityCode(activityResponse.getActivityCode());
beanDto=activityResponse.getBenefits().get(0);
}
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount discount=null;
if (discountResult != null && CollectionUtils.isNotEmpty(discountResult.getDiscounts())) {
discount = discountResult.getDiscounts().stream().filter((d) -> ActivityTypeEnum.TYPE_14.getCode().equals(d.getType())).findFirst().orElse(null);
}
if(discount!=null) {
if(beanDto.getBenefitType() == 1) {
String desc = DELIVERY_DISCOUNT_DESC2;
shoppingCartGoodsResponseVo.setDeliveryDiscountDesc(String.format(desc, df.format(beanDto.getThresholdAmount().doubleValue() /100) ));
}
else {
String desc = DELIVERY_DISCOUNT_DESC1;
shoppingCartGoodsResponseVo.setDeliveryDiscountDesc(String.format(desc, df.format(beanDto.getThresholdAmount().doubleValue() /100) ,df.format(beanDto.getDiscountAmount().doubleValue() / 100)));
}
shoppingCartGoodsResponseVo.setDeliveryAmount(discountResult.getDeliveryAmount());
shoppingCartGoodsResponseVo.setDiscountDeliveryAmount(discountResult.getDistributionFee());
shoppingCartGoodsResponseVo.setThresholdAmount(discount.getThresholdAmount());
shoppingCartGoodsResponseVo.setIsDiscountDelivery(true);
}
else {
if (activityResponse!=null) {
if(beanDto.getBenefitType() == 1) {
String desc = DELIVERY_DISCOUNT_DESC2;
shoppingCartGoodsResponseVo.setDeliveryDiscountDesc(String.format(desc, df.format(beanDto.getThresholdAmount().doubleValue() /100) ));
}
else {
String desc = DELIVERY_DISCOUNT_DESC1;
shoppingCartGoodsResponseVo.setDeliveryDiscountDesc(String.format(desc, df.format(beanDto.getThresholdAmount().doubleValue() /100 ),df.format(beanDto.getDiscountAmount().doubleValue() / 100)));
}
shoppingCartGoodsResponseVo.setDeliveryAmount(deliveryAmount);
shoppingCartGoodsResponseVo.setDiscountDeliveryAmount(deliveryAmount);
shoppingCartGoodsResponseVo.setIsDiscountDelivery(false);
} else {
String desc = DELIVERY_DISCOUNT_DESC3;
shoppingCartGoodsResponseVo.setDeliveryDiscountDesc(String.format(desc, df.format(deliveryAmount.doubleValue() / 100)));
shoppingCartGoodsResponseVo.setDeliveryAmount(deliveryAmount);
shoppingCartGoodsResponseVo.setDiscountDeliveryAmount(deliveryAmount);
shoppingCartGoodsResponseVo.setIsDiscountDelivery(false);
}
}
}
}
package cn.freemud.service.impl.calculate.promotion;
import cn.freemud.constant.CustomerScoreConstant;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.dto.user.GetUserScoreUseDetailRequest;
import cn.freemud.entities.dto.user.GetUserScoreUserDetailResponse;
import cn.freemud.entities.vo.ShoppingCartCustomerScoreVo;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.thirdparty.CustomScoreClient;
import cn.freemud.utils.LogUtil;
import com.freemud.application.sdk.api.constant.FMStatusCode;
import com.freemud.application.sdk.api.log.ErrorLog;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.service.impl.calculate.promotion ScoreSharingService
* @Description: 积分抵扣
* @author: family
* @date: 2020/9/9
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class ScoreSharingService {
@Autowired
private CustomScoreClient customScoreClient;
public void scoreResponse(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, UserLoginInfoDto userLoginInfoDto
, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (shoppingCartInfoRequestVo == null || shoppingCartInfoRequestVo.getUseCustomerScore() == null
|| shoppingCartInfoRequestVo.getUseCustomerScore() == null
|| shoppingCartInfoRequestVo.getUseCustomerScore().equals(CustomerScoreConstant.NO_DISPLAY.getValue())) {
return;
}
GetUserScoreUseDetailRequest request = new GetUserScoreUseDetailRequest();
request.setMemberId(userLoginInfoDto.getMemberId());
request.setPaidAmount(getValue(shoppingCartGoodsResponseVo.getTotalAmount()));
request.setPartnerId(userLoginInfoDto.getPartnerId());
GetUserScoreUserDetailResponse userScoreUseDetail = null;
try {
// 加入try catch是为了custom服务挂掉,购物车服务可以也可以正常
userScoreUseDetail = customScoreClient.getUserScoreUseDetail(request);
} catch (Exception ex) {
ErrorLog.printErrorLog("getUserScoreUseDetailError", "/user/scoreUseDetail", request, ex);
}
if (userScoreUseDetail != null && userScoreUseDetail.getCode().equals(FMStatusCode.SUCCESS.getCode()) && userScoreUseDetail.getResult() != null) {
Integer discountAmount = 0;
if (CustomerScoreConstant.SUBSTRACT.getValue().equals(shoppingCartInfoRequestVo.getUseCustomerScore())) {
//设置 购物车总金额=购物车总价-积分扣减金额
discountAmount = getValue(userScoreUseDetail.getResult().getReduceAmount());
}
//设置 积分抵扣VO
ShoppingCartCustomerScoreVo customerScoreVo = new ShoppingCartCustomerScoreVo();
customerScoreVo.setCurrentScore(getValue(userScoreUseDetail.getResult().getCurrentScore()));
customerScoreVo.setReduceAmount(getValue(userScoreUseDetail.getResult().getReduceAmount()));
customerScoreVo.setReducePriceLimit(getValue(userScoreUseDetail.getResult().getReducePriceLimit()));
customerScoreVo.setOverlayOffers(userScoreUseDetail.getResult().getOverlayOffers());
customerScoreVo.setScoreReduceState(getValue(userScoreUseDetail.getResult().getScoreState()));
// 是否可优惠同享{0所有订单均可抵扣,1仅限原价订单才可抵扣(享受了促销活动、或使用了优惠券,不能进行积分抵扣
if (getValue(userScoreUseDetail.getResult().getOverlayOffers()) == 0) {
customerScoreVo.setScoreReduceState(getValue(userScoreUseDetail.getResult().getScoreState()));
} else {
if (StringUtils.isNotBlank(shoppingCartInfoRequestVo.getCouponCode()) || (discountResult != null && discountResult.getTotalDiscountAmount().intValue() > 0)
|| (discountResult != null && !CollectionUtils.isEmpty(discountResult.getDiscounts()))) {
//是否有换购
int type81 = 0;
for (CalculationSharingDiscountResponseDto.CalculationDiscountResult.Discount discount : discountResult.getDiscounts()) {
if (ActivityTypeEnum.TYPE_81.getCode().equals(discount.getType())) {
type81 = 1;
break;
}
}
//集点
long discountCount = discountResult.getDiscounts().stream().filter(discount -> !ActivityTypeEnum.TYPE_221.getCode().equals(discount.getType())).count();
//积分抵扣开关禁用 有换购活动 且选中了换购商品
// - 有换购且选中了换购商品
// - 有换购且没有选中换购商品 且除集点以外还有其他促销
if ((type81 == 0 && discountCount >= 1)
|| (type81 == 1 && !CollectionUtils.isEmpty(shoppingCartInfoRequestVo.getSendGoods()))
|| (type81 == 1 && discountCount > 1)) {
customerScoreVo.setScoreReduceState(5);
userScoreUseDetail.getResult().setScoreState(5);
discountAmount = 0;
customerScoreVo.setReduceAmount(0);
}
}
}
customerScoreVo.setUseScore(getValue(userScoreUseDetail.getResult().getUseScore()));
String msg = "";
// 积分抵扣状态 1积分可用 2积分不足 3 积分抵扣开关禁用 4、订单金额不满足开启积分抵现要求
switch (userScoreUseDetail.getResult().getScoreState()) {
case 1:
msg = String.format("共%s积分,可用%s积分抵¥%s", getValue(userScoreUseDetail.getResult().getCurrentScore()), getValue(userScoreUseDetail.getResult().getUseScore()), ((double) userScoreUseDetail.getResult().getReduceAmount()) / 100);
break;
case 2:
String[] split = userScoreUseDetail.getResult().getScoreReduceRate().split(":");
msg = String.format("共%s积分,每%s积分可抵¥%s", getValue(userScoreUseDetail.getResult().getCurrentScore()), split[0], split[1]);
break;
case 5:
msg = "已享受优惠,无法再参与积分抵扣";
break;
case 4:
msg = String.format("共%s积分,订单满¥%s可开启积分抵现", getValue(userScoreUseDetail.getResult().getCurrentScore()), ((double) userScoreUseDetail.getResult().getReducePriceLimit()) / 100);
break;
default:
break;
}
customerScoreVo.setCustomerScorePrompt(msg);
shoppingCartGoodsResponseVo.setCustomerScoreVo(customerScoreVo);
shoppingCartGoodsResponseVo.setTotalDiscountAmount(shoppingCartGoodsResponseVo.getTotalDiscountAmount() + discountAmount);
shoppingCartGoodsResponseVo.setTotalAmount(shoppingCartGoodsResponseVo.getTotalAmount() - discountAmount);
}
return;
}
private Integer getValue(Object object) {
Integer result = 0;
try {
if (object != null) {
if (object instanceof Integer) {
result = (Integer) object;
}
else if (object instanceof String) {
result = Integer.parseInt((String) object);
}
else if (object instanceof Double) {
result = (int) ((double) object);
}
else if (object instanceof Float) {
result = (int) ((float) object);
}
else if (object instanceof BigDecimal) {
result = ((BigDecimal) object).intValue();
}
else if (object instanceof Long) {
result = ((Long) object).intValue();
}
}
} catch (Exception ex) {
LogUtil.error("getScoreValueFail", "", "", ex);
}
return result;
}
}
...@@ -115,7 +115,13 @@ public class CalculationServiceImpl { ...@@ -115,7 +115,13 @@ public class CalculationServiceImpl {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList = new ArrayList<>(); List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList = new ArrayList<>();
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
addCalculationDiscountGoods(calculationDiscountGoodsList, cartGoods.getCustomerCode(),cartGoods.getGoodsId(), cartGoods.getQty(), cartGoods.getFinalPrice(), cartGoods.getMemberDiscount(),cartGoods); addCalculationDiscountGoods(calculationDiscountGoodsList,
StringUtils.isNotEmpty(cartGoods.getCustomerCode()) ? cartGoods.getCustomerCode() : "",
StringUtils.isNotEmpty(cartGoods.getGoodsId()) ? cartGoods.getGoodsId() : "",
null != cartGoods.getQty() ? cartGoods.getQty() : 0 ,
null != cartGoods.getFinalPrice() ? cartGoods.getFinalPrice() : 0,
null != cartGoods.getMemberDiscount() ? cartGoods.getMemberDiscount() : 0,
cartGoods);
} }
// 当加价购商品不为空时 // 当加价购商品不为空时
...@@ -199,18 +205,18 @@ public class CalculationServiceImpl { ...@@ -199,18 +205,18 @@ public class CalculationServiceImpl {
} }
//订单级别券优惠 //订单级别券优惠
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults discount : calculationDiscountResult.getCouponDiscounts()) { // for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults discount : calculationDiscountResult.getCouponDiscounts()) {
int discountAmount = (discount.getDiscountAmount() == null) ? 0 : discount.getDiscountAmount(); // int discountAmount = (discount.getDiscountAmount() == null) ? 0 : discount.getDiscountAmount();
Integer discountType = discount.getActivityType(); // Integer discountType = discount.getActivityType();
if (discountType != null && discountAmount > 0) { // if (discountType != null && discountAmount > 0) {
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto(); // ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
activityDiscountsDto.setActivityCode(discount.getCouponCode()); // activityDiscountsDto.setActivityCode(discount.getCouponCode());
activityDiscountsDto.setActivityName(discount.getActivityName()); // activityDiscountsDto.setActivityName(discount.getActivityName());
activityDiscountsDto.setActivityType(discountType); // activityDiscountsDto.setActivityType(discountType);
activityDiscountsDto.setDiscountAmount(0 - discountAmount); // activityDiscountsDto.setDiscountAmount(0 - discountAmount);
activityDiscountsDtos.add(activityDiscountsDto); // activityDiscountsDtos.add(activityDiscountsDto);
} // }
} // }
//过滤出加价购 //过滤出加价购
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> addMoneyDiscounts = discounts.stream().filter(discount -> ActivityTypeEnum.TYPE_81.getCode().equals(discount.getType())).collect(Collectors.toList()); List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> addMoneyDiscounts = discounts.stream().filter(discount -> ActivityTypeEnum.TYPE_81.getCode().equals(discount.getType())).collect(Collectors.toList());
...@@ -402,9 +408,9 @@ public class CalculationServiceImpl { ...@@ -402,9 +408,9 @@ public class CalculationServiceImpl {
long totalPackgeAmount = 0L; long totalPackgeAmount = 0L;
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
// 设置商品原价与商品现价的初始值 // 设置商品原价与商品现价的初始值
long originalAmount = cartGoods.getOriginalPrice() * cartGoods.getQty(); long originalAmount = null != cartGoods.getOriginalPrice() ? cartGoods.getOriginalPrice() : 0;
long amount = cartGoods.getOriginalPrice() * cartGoods.getQty(); long amount = null != cartGoods.getOriginalPrice() ? cartGoods.getOriginalPrice() : 0;
long packAmount = cartGoods.getPackPrice() * cartGoods.getQty(); long packAmount = null != cartGoods.getPackPrice() ? cartGoods.getPackPrice() : 0;
totalOriginalAmount += originalAmount; totalOriginalAmount += originalAmount;
totalAmount += amount; totalAmount += amount;
totalPackgeAmount += packAmount; totalPackgeAmount += packAmount;
......
...@@ -274,7 +274,7 @@ public class CouponDiscountCalculation { ...@@ -274,7 +274,7 @@ public class CouponDiscountCalculation {
private List<CouponState> buildAvailableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes) { public List<CouponState> buildAvailableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes) {
// String appSecret = getAppSecret(partnerId); // String appSecret = getAppSecret(partnerId);
// 最大15一提交 // 最大15一提交
int maxNum = 15; int maxNum = 15;
...@@ -321,7 +321,7 @@ public class CouponDiscountCalculation { ...@@ -321,7 +321,7 @@ public class CouponDiscountCalculation {
} }
public List<CouponAvailableReq> buildAvailableCoupons(QueryCartInfoRequestVo requestVo,List<CartGoods> cartGoods){ public List<CouponAvailableReq> buildAvailableCoupons(QueryCartInfoRequestVo requestVo,List<CartGoods> cartGoods,String moneyCoupon){
List<CouponAvailableReq> resList = new ArrayList<>(); List<CouponAvailableReq> resList = new ArrayList<>();
CouponAvailableReq res = new CouponAvailableReq(); CouponAvailableReq res = new CouponAvailableReq();
res.setProviderId(requestVo.getPartnerId()); res.setProviderId(requestVo.getPartnerId());
...@@ -330,12 +330,20 @@ public class CouponDiscountCalculation { ...@@ -330,12 +330,20 @@ public class CouponDiscountCalculation {
List<String> couponList = new ArrayList<>(); List<String> couponList = new ArrayList<>();
res.setChannelIdList(commonService.getOrgCodes(requestVo.getPartnerId(), requestVo.getStoreId())); res.setChannelIdList(commonService.getOrgCodes(requestVo.getPartnerId(), requestVo.getStoreId()));
List<CouponProductVo> productList = new ArrayList<>(); List<CouponProductVo> productList = new ArrayList<>();
res.setCouponCodes(StringUtils.isNotEmpty(moneyCoupon) ? Arrays.asList(moneyCoupon) :null);
if (CollectionUtils.isNotEmpty(cartGoods)) { if (CollectionUtils.isNotEmpty(cartGoods)) {
cartGoods.forEach(cartGood -> { cartGoods.forEach(cartGood -> {
if (StringUtils.isNotEmpty(cartGood.getCouponCode())) { if (StringUtils.isNotEmpty(cartGood.getCouponCode())) {
couponList.add(cartGood.getCouponCode()); CouponProductVo couponProductVo = new CouponProductVo();
res.setCouponCodes(couponList); couponProductVo.setAmount(cartGood.getAmount().intValue());
couponProductVo.setKeyProductCode(cartGood.getCustomerCode());
couponProductVo.setQuantity(cartGood.getQty());
couponProductVo.setProductId(cartGood.getGoodsId());
couponProductVo.setCouponCode(cartGood.getCouponCode());
couponProductVo.setCategoryCode(null);
productList.add(couponProductVo);
} }
if (CollectionUtils.isNotEmpty(cartGood.getProductComboList())) { if (CollectionUtils.isNotEmpty(cartGood.getProductComboList())) {
cartGood.getProductComboList().forEach(comboxGoods -> { cartGood.getProductComboList().forEach(comboxGoods -> {
CouponProductVo couponProductVo = new CouponProductVo(); CouponProductVo couponProductVo = new CouponProductVo();
...@@ -343,7 +351,6 @@ public class CouponDiscountCalculation { ...@@ -343,7 +351,6 @@ public class CouponDiscountCalculation {
couponProductVo.setKeyProductCode(comboxGoods.getCustomerCode()); couponProductVo.setKeyProductCode(comboxGoods.getCustomerCode());
couponProductVo.setQuantity(comboxGoods.getQty()); couponProductVo.setQuantity(comboxGoods.getQty());
couponProductVo.setProductId(comboxGoods.getGoodsId()); couponProductVo.setProductId(comboxGoods.getGoodsId());
couponProductVo.setCouponCode(cartGood.getCouponCode());
couponProductVo.setCategoryCode(null); couponProductVo.setCategoryCode(null);
productList.add(couponProductVo); productList.add(couponProductVo);
}); });
...@@ -355,7 +362,6 @@ public class CouponDiscountCalculation { ...@@ -355,7 +362,6 @@ public class CouponDiscountCalculation {
couponProductVo.setKeyProductCode(comboxGoods.getCustomerCode()); couponProductVo.setKeyProductCode(comboxGoods.getCustomerCode());
couponProductVo.setQuantity(comboxGoods.getQty()); couponProductVo.setQuantity(comboxGoods.getQty());
couponProductVo.setProductId(comboxGoods.getGoodsId()); couponProductVo.setProductId(comboxGoods.getGoodsId());
couponProductVo.setCouponCode(cartGood.getCouponCode());
couponProductVo.setCategoryCode(null); couponProductVo.setCategoryCode(null);
productList.add(couponProductVo); productList.add(couponProductVo);
}); });
......
...@@ -58,6 +58,7 @@ public class TimeSaleCalculation { ...@@ -58,6 +58,7 @@ public class TimeSaleCalculation {
Map<String, Integer> numberMap = new HashMap<>(); Map<String, Integer> numberMap = new HashMap<>();
List<Integer> discounts = Arrays.asList(ActivityTypeEnum.TYPE_2.getCode(), ActivityTypeEnum.TYPE_21.getCode(),ActivityTypeEnum.TYPE_23.getCode()); List<Integer> discounts = Arrays.asList(ActivityTypeEnum.TYPE_2.getCode(), ActivityTypeEnum.TYPE_21.getCode(),ActivityTypeEnum.TYPE_23.getCode());
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
cartGoods.setOriginalPrice( null != cartGoods.getOriginalPrice() ? cartGoods.getOriginalPrice() : 0);
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods; ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods;
if ((goods = goodsMap.get(cartGoods.getGoodsId())) == null) { if ((goods = goodsMap.get(cartGoods.getGoodsId())) == null) {
continue; continue;
......
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "promotion-service", url = "${saas.activityclient.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface CalculationClient {
/**
* 促销新的算价对接
*/
@PostMapping("/promotioncenter/calculateservice/discount/sharing")
CalculationSharingDiscountResponseDto calculationSharingDiscount(CalculationSharingDiscountRequestDto shareDiscountRequestDto);
}
...@@ -133,7 +133,7 @@ public class CouponServiceTest { ...@@ -133,7 +133,7 @@ public class CouponServiceTest {
List<CartGoods> cartGoods = Lists.newArrayList(); List<CartGoods> cartGoods = Lists.newArrayList();
CartGoods cartGood = new CartGoods(); CartGoods cartGood = new CartGoods();
cartGoods.add(cartGood); cartGoods.add(cartGood);
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoods, "1864", "122424124", "1011", "88123124", true, 1); ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoods, "1864", "122424124", "1011", "88123124", true, 1, 1);
assertTrue(activityClassifyCouponBean.getCouponNum() >= 1); assertTrue(activityClassifyCouponBean.getCouponNum() >= 1);
} }
......
...@@ -55,6 +55,11 @@ public class ShoppingCartMealServiceTest { ...@@ -55,6 +55,11 @@ public class ShoppingCartMealServiceTest {
} }
@Test @Test
public void t2() {
shoppingCartMCoffeeService.getShoppingCartGoods(JSON.parseObject("{\"shoppingCartInfoRequestVo\":{\"flag\":0,\"menuType\":\"saas\",\"orderType\":1,\"partnerId\":\"1206\",\"reachStoreType\":5,\"receiveId\":\"\",\"sessionId\":\"eac51b0d36095d85659f2c89b49e5623ff9e4f1e\",\"shopId\":\"1450026\"}}", GetShoppingCartGoodsApportionRequestVo.class));
}
@Test
public void addGoods() { public void addGoods() {
add("testMealDE"); add("testMealDE");
} }
......
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