Commit 1c2f8473 by zhiheng.zhang

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

parents 7c48f3bb ec846be5
......@@ -2564,10 +2564,13 @@ public class OrderSdkAdapter {
for (CreateOrderProductRequest productRequest : products) {
// 普通商品 订单转换
productRequest.setOpid(index);
originalAmount += updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, productRequest, partnerId, "");
if (ProductTypeEnum.MATERIAL_PRODUCT.getCode().equals(productRequest.getProductType())) {
originalAmount += updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, productRequest, partnerId, productRequest.getParentProductId());
} else {
originalAmount += updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, productRequest, partnerId, "");
if (CollectionUtils.isNotEmpty(productRequest.getMaterialProduct())) {
productRequest.getMaterialProduct().stream().forEach(
material -> updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, material, partnerId, productRequest.getProductId())
);
}
}
// 如果是套餐商品,需要转换当前商品行子集ComboProduct&GroupProduct(固定商品、可选商品)
if (ObjectUtils.equals(ProductTypeEnum.SETMEAL_PRODUCT.getCode(), productRequest.getProductType()) || ObjectUtils.equals(ProductTypeEnum.SETMEAL_UPPRICE_PRODUCT.getCode(), productRequest.getProductType())) {
......
......@@ -134,6 +134,10 @@ public class CreateOrderProductRequest extends BaseConfig {
*/
private List<CreateOrderProductRequest> comboProduct;
/**
*加料商品
*/
private List<CreateOrderProductRequest> materialProduct;
/**
* 优惠列表
*/
private List<CreateOrderAccountRequest> accounts;
......
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-shoppingcart-sdk</artifactId>
<version>1.1.7-SNAPSHOT</version>
<version>1.1.8-SNAPSHOT</version>
<dependencies>
<dependency>
......
......@@ -6,4 +6,4 @@
| 1.1.2-SNAPSHOT| 券码接口新增参数:channelCodeList | 梁崇福 | 2020-05-13 |
| 1.1.4-SNAPSHOT| 券码接口修改为channel_codes | 梁崇福 | 2020-06-08 |
| 1.1.5-SNAPSHOT| 增加统计分类编号:classificationId,classificationName | | 2020-06-12 |
| 1.1.7-SNAPSHOT| 加料 | 李小二 | 2020-07-30 |
\ No newline at end of file
| 1.1.8-SNAPSHOT| 加料 | 李小二 | 2020-07-30 |
\ No newline at end of file
......@@ -352,11 +352,11 @@ public class ShoppingCartAdapter {
Long originalMaterAmount = 0L;
String materialSubName = cartGoods.getSubName();
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
ProductBeanDTO.ProductGroupType.GroupDetailType detail = materialHash.get(materialGoods.getMaterialId());
ProductBeanDTO.ProductGroupType.GroupDetailType detail = materialHash.get(materialGoods.getSpuId());
if (detail == null) continue;
CartGoods.MaterialGoods material = new CartGoods.MaterialGoods();
material.setMaterialName(detail.getProductName());
material.setMaterialId(detail.getProductId());
material.setSpuName(detail.getProductName());
material.setSpuId(detail.getProductId());
//行单价 \ 行总价
material.setFinalPrice(detail.getProductFinalPrice().longValue());
material.setAmount(detail.getProductFinalPrice().longValue());
......
......@@ -302,11 +302,11 @@ public class CartGoods {
/**
* 加料Id
*/
private String materialId;
private String spuId;
/**
* 加料名称
*/
private String materialName;
private String spuName;
/**
* 购物车一行商品的现单价
*/
......
......@@ -143,19 +143,12 @@ public class OrderAdapter {
// 根据购物车商品信息获取优惠信息
int orderAccountIndex = 0;
// TODO 取出加料信息
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto : cartGoodsDetailDtos) {
Integer qty = cartGoodsDetailDto.getQty();
if (qty > 0) {
CreateOrderProductRequest createOrderProductDto = convent2OrderProduct(cartGoodsDetailDto);
createOrderProductDto.setIgnoreProductPrice(1);
products.add(createOrderProductDto);
if (CollectionUtils.isNotEmpty(cartGoodsDetailDto.getMaterialList())) {
cartGoodsDetailDto.getMaterialList().stream().forEach(p -> {
CreateOrderProductRequest orderProductDto = convent2OrderProductByMaterial(cartGoodsDetailDto, p);
products.add(orderProductDto);
});
}
if (CollectionUtils.isNotEmpty(cartGoodsDetailDto.getActivityDiscountsDtos())) {
createOrderProductDto.setAccounts(getAccounts(createOrderProductDto, cartGoodsDetailDto.getActivityDiscountsDtos()));
}
......@@ -258,18 +251,6 @@ public class OrderAdapter {
return createOrderDto;
}
private CreateOrderProductRequest convent2OrderProductByMaterial(ShoppingCartGoodsDto.CartGoodsDetailDto goodsDetail, ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsMaterial material) {
CreateOrderProductRequest createOrderProductRequest = new CreateOrderProductRequest();
createOrderProductRequest.setParentProductId(goodsDetail.getSpuId());
createOrderProductRequest.setProductId(material.getMaterialId());
createOrderProductRequest.setProductName(material.getMaterialName());
createOrderProductRequest.setPrice(material.getOriginalPrice());
createOrderProductRequest.setSalePrice(material.getSalePrice());
createOrderProductRequest.setTotalDiscountAmount(material.getTotalDiscountAmount());
createOrderProductRequest.setNumber(goodsDetail.getQty());
return createOrderProductRequest;
}
public CreateFatherSonOrderRequest convertFatherSonOrderRequest(CreateOrderVo createOrderVo, ShoppingCartGoodsDto shoppingCartGoodsDto,
OrderExtendedReq orderExtendedReq,StoreResponse.BizVO storeResponseDto,
String appId) {
......@@ -1561,29 +1542,40 @@ public class OrderAdapter {
switch (orderBean.getStatus()) {
// 未接单
case 1:
orderRefund = configMap.get(OrderRefundEnum.TAKEORDER_REFUND.getKeyValue());
//区分外卖单和到店订单,判断是否可以退款
if(OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_TAKE_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.TAKEORDER_REFUND.getKeyValue());
}
if (orderRefund == null || (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue()))) {
canRefund = true;
}
break;
//已接单
case 3:
orderRefund = configMap.get(OrderRefundEnum.RECEIPTORDER_REFUND.getKeyValue());
if(OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_RECEIPT_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.RECEIPTORDER_REFUND.getKeyValue());
}
if (orderRefund == null || (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue()))) {
canRefund = true;
}
break;
//制作完成
case 31:
orderRefund = configMap.get(OrderRefundEnum.COMPLETEMAKEORDER_REFUND.getKeyValue());
if(OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_COMPLETE_MAKE_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.COMPLETEMAKEORDER_REFUND.getKeyValue());
}
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue())) {
canRefund = true;
}
break;
// 订单完成
case 5:
orderRefund = configMap.get(OrderRefundEnum.ORDER_REFUND.getKeyValue());
long currentTime = System.currentTimeMillis();
long gmtModified = orderBean.getGmtModified();
......@@ -1595,6 +1587,11 @@ public class OrderAdapter {
}
long allowRefundTime = gmtModified + value * 24 * 60 * 60 * 1000;
if(OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.ORDER_REFUND.getKeyValue());
}
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue()) && (allowRefundTime - currentTime) >= 0) {
canRefund = true;
}
......@@ -1920,6 +1917,16 @@ public class OrderAdapter {
});
createOrderProductDemoDto.setComboProduct(comboProducts);
}
//加料商品
if (cartGoodsDetailDto.getProductType() != null && (cartGoodsDetailDto.getProductType() == ProductType.MATERIALPRODUCT_UPPRICE.getCode())) {
List<CreateOrderProductRequest> materialProducts = new ArrayList<>();
cartGoodsDetailDto.getMaterialList().forEach(product -> {
materialProducts.add(convent2OrderProductDemo(product));
});
createOrderProductDemoDto.setMaterialProduct(materialProducts);
}
createOrderProductDemoDto.setProductType(cartGoodsDetailDto.getProductType());
return createOrderProductDemoDto;
}
......
......@@ -212,7 +212,7 @@ public class ShoppingCartGoodsDto {
*/
private List<CartGoodsDetailDto> comboProducts;
private List<CartGoodsMaterial> materialList;
private List<CartGoodsDetailDto> materialList;
@Data
public final static class CartGoodsExtra {
......@@ -227,45 +227,6 @@ public class ShoppingCartGoodsDto {
}
@Data
public final static class CartGoodsMaterial {
/**
* 加料Id
*/
private String materialId;
/**
* 加料名称
*/
private String materialName;
/**
* 加料数量
*/
private Integer qty;
/**
* 加料原始价格
*/
private Long originalPrice;
/**
* 加料优惠价格
*/
private Long totalDiscountAmount;
/**
* 销售价格
*/
private Long salePrice;
/**
* 商品类型
*/
private Integer type;
/**
* 商品优惠信息
*/
List<ActivityDiscountsDto> activityDiscountsDtos;
}
/**
* 获取extras attributeNames
*/
......
......@@ -19,7 +19,13 @@ public enum OrderRefundEnum {
TAKEORDER_REFUND("takeOrderRefund", "未接单是否支持退款"),
RECEIPTORDER_REFUND("receiptOrderRefund", "已接单是否支持退款"),
COMPLETEMAKEORDER_REFUND("completeMakeOrderRefund", "制作完成是否支持退款"),
REFUND_DELIVERY_FEE_ENABLE("refundShippingFee","商家同意退款时是否退配送费");
REFUND_DELIVERY_FEE_ENABLE("refundShippingFee","商家同意退款时是否退配送费"),
DELIVERY_TAKE_ORDER_REFUND("deliveryTakeOrderRefund","外卖单未接单是否支持退款"),
DELIVERY_RECEIPT_ORDER_REFUND("deliveryReceiptOrderRefund","外卖单已接单是否支持退款"),
DELIVERY_COMPLETE_MAKE_ORDER_REFUND("deliveryCompleteMakeOrderRefund","外卖单制作完成是否支持退款"),
DELIVERY_ORDER_REFUND("deliveryOrderRefund","外卖单订单完成是否支持退款");
private String keyValue;
......
......@@ -16,7 +16,8 @@ public enum ProductType {
NOSPEC(1, "无规格"),
HAVESPEC(10, "有规格"),
SETMEALPRODUCT(6,"套餐商品"),
SETMEALPRODUCT_UPPRICE(7,"加价套餐商品");
SETMEALPRODUCT_UPPRICE(7,"加价套餐商品"),
MATERIALPRODUCT_UPPRICE(88,"加料商品");
private int code;
......
......@@ -19,7 +19,12 @@ public enum OrderRefundEnum {
TAKEORDER_REFUND("takeOrderRefund", "未接单是否支持退款"),
RECEIPTORDER_REFUND("receiptOrderRefund", "已接单是否支持退款"),
COMPLETEMAKEORDER_REFUND("completeMakeOrderRefund", "制作完成是否支持退款"),
REFUND_DELIVERY_FEE_ENABLE("refundShippingFee","商家同意退款时是否退配送费");
REFUND_DELIVERY_FEE_ENABLE("refundShippingFee","商家同意退款时是否退配送费"),
DELIVERY_TAKE_ORDER_REFUND("deliveryTakeOrderRefund","外卖单未接单是否支持退款"),
DELIVERY_RECEIPT_ORDER_REFUND("deliveryReceiptOrderRefund","外卖单已接单是否支持退款"),
DELIVERY_COMPLETE_MAKE_ORDER_REFUND("deliveryCompleteMakeOrderRefund","外卖单制作完成是否支持退款"),
DELIVERY_ORDER_REFUND("deliveryOrderRefund","外卖单订单完成是否支持退款");
private String keyValue;
......
......@@ -13,6 +13,7 @@ import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerWxappConfig;
import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager;
import com.freemud.application.sdk.api.ordercenter.enums.OperateClient;
import com.freemud.sdk.api.assortment.message.enums.OrderType;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.collections4.CollectionUtils;
......@@ -321,28 +322,45 @@ public class OrderVerifyHandle {
switch (data.getStatus()) {
// 未接单
case 1:
orderRefund = configMap.get(OrderRefundEnum.TAKEORDER_REFUND.getKeyValue());
//区分外卖单和到店订单,判断是否可以退款
if(OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_TAKE_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.TAKEORDER_REFUND.getKeyValue());
}
if (orderRefund == null || (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue()))) {
isFinishRefund = true;
}
break;
//已接单
case 3:
orderRefund = configMap.get(OrderRefundEnum.RECEIPTORDER_REFUND.getKeyValue());
if(OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_RECEIPT_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.RECEIPTORDER_REFUND.getKeyValue());
}
if (orderRefund == null || (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue()))) {
isFinishRefund = true;
}
break;
//制作完成
case 31:
orderRefund = configMap.get(OrderRefundEnum.COMPLETEMAKEORDER_REFUND.getKeyValue());
if(OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_COMPLETE_MAKE_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.COMPLETEMAKEORDER_REFUND.getKeyValue());
}
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue())) {
isFinishRefund = true;
}
break;
// 订单完成
case 5:
orderRefund = configMap.get(OrderRefundEnum.ORDER_REFUND.getKeyValue());
if(OrderType.TAKE_OUT.getCode().equals(data.getOrderType())) {
orderRefund = configMap.get(OrderRefundEnum.DELIVERY_ORDER_REFUND.getKeyValue());
}else {
orderRefund = configMap.get(OrderRefundEnum.ORDER_REFUND.getKeyValue());
}
if (orderRefund != null && ALLOW_REFUND.equals(orderRefund.getAppValue())) {
isFinishRefund = true;
}
......
......@@ -45,7 +45,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-shoppingcart-sdk</artifactId>
<version>1.1.7-SNAPSHOT</version>
<version>1.1.8-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -111,14 +111,16 @@ public class ShoppingCartConvertAdapter {
} else if (cartGoods.isWeightType()) {
cartGoodsDetailDto.setProductType(ProductType.WEIGHT_PRODUCT.getCode());
}
if (cartGoods.getProductMaterialList().size() > 0) {
//小料
if (CollectionUtils.isNotEmpty(cartGoods.getProductMaterialList())) {
List<ShoppingCartGoodsDto.CartGoodsDetailDto.MaterialGoods> materialList = new ArrayList<>(0);
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
ShoppingCartGoodsDto.CartGoodsDetailDto.MaterialGoods goods = new ShoppingCartGoodsDto.CartGoodsDetailDto.MaterialGoods();
goods.setMaterialId(materialGoods.getMaterialId());
goods.setMaterialName(materialGoods.getMaterialName());
goods.setSpuId(materialGoods.getSpuId());
goods.setSpuName(materialGoods.getSpuName());
goods.setOriginalPrice(materialGoods.getOriginalPrice());
goods.setSalePrice(materialGoods.getFinalPrice());
goods.setQty(cartGoods.getQty());
materialList.add(goods);
}
cartGoodsDetailDto.setMaterialList(materialList);
......@@ -399,7 +401,7 @@ public class ShoppingCartConvertAdapter {
if (CollectionUtils.isNotEmpty(addShoppingCartGoodsRequestVo.getProductMaterialList())) {
for (MaterialRequestVo materialRequestVo : addShoppingCartGoodsRequestVo.getProductMaterialList()) {
CartGoods.MaterialGoods materialGoods = new CartGoods.MaterialGoods();
materialGoods.setMaterialId(materialRequestVo.getMaterialId());
materialGoods.setSpuId(materialRequestVo.getSpuId());
materialGoodsList.add(materialGoods);
}
}
......
package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.*;
import cn.freemud.service.impl.mcoffee.ShoppingCartMCoffeeServiceImpl;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: MCoffeeShoppingCartController
* @Package cn.freemud.controller
* @Description:
* @author: ping1.wu
* @date: 2020/7/21 17:37
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@RestController
@RequestMapping(value = "/shoppingCart/MCoffee", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "购物车 controller", tags = {"购物车管理接口"})
@Slf4j
public class MCoffeeShoppingCartController {
@Autowired
private ShoppingCartMCoffeeServiceImpl shoppingCartMCoffeeService;
/**
* 向购物车中添加商品
*/
@ApiAnnotation(logMessage = "addGoods")
@PostMapping(value = "/addGoods")
public BaseResponse addGoods(@Validated @LogParams @RequestBody AddShoppingCartGoodsRequestVo request) {
return shoppingCartMCoffeeService.addGoods(request);
}
/**
* 修改购物车中商品数量
*/
@ApiAnnotation(logMessage = "updateGoodsQty")
@PostMapping(value = "/updateGoodsQty")
public BaseResponse updateGoodsQty(@Validated @LogParams @RequestBody UpdateShoppingCartGoodsQtyRequestVo request) {
return shoppingCartMCoffeeService.updateGoodsQty(request);
}
/**
* 查询购物车信息
*/
@ApiAnnotation(logMessage = "listCartGoods")
@PostMapping(value = "/listCartGoods")
public BaseResponse listCartGoods(@Validated @LogParams @RequestBody ShoppingCartInfoRequestVo request) {
return shoppingCartMCoffeeService.getGoodsList(request);
}
/**
* 清空购物车
*/
@ApiAnnotation(logMessage = "clearCartGoods")
@PostMapping(value = "/clearCartGoods")
public BaseResponse clearCartGoods(@Validated @LogParams @RequestBody ShoppingCartClearRequestVo request) {
return shoppingCartMCoffeeService.clear(request);
}
}
......@@ -262,8 +262,8 @@ public class ShoppingCartGoodsDto {
/**
* 加料商品ID
*/
private String materialId;
private String materialName;
private String spuId;
private String spuName;
/**
* 商品行记录:当前元售价
*/
......@@ -273,6 +273,10 @@ public class ShoppingCartGoodsDto {
*/
private Long salePrice;
/**
* 小料商品的数量
*/
private Integer qty;
/**
* 商品行优惠总金额=数量*单个商品优惠金额
*/
private Integer totalDiscountAmount;
......
......@@ -381,11 +381,11 @@ public class CartGoods {
/**
* 加料Id
*/
private String materialId;
private String spuId;
/**
* 加料名称
*/
private String materialName;
private String spuName;
/**
* 购物车一行商品的原单价
*/
......
......@@ -19,5 +19,5 @@ public class MaterialRequestVo {
/**
* 加料商品ID
*/
private String materialId;
private String spuId;
}
......@@ -32,7 +32,7 @@ public class UpdateShoppingCartGoodsQtyRequestVo extends BaseRequestVo {
private String cartGoodsUid;
/**
* 商品数量
* 更新后商品数量
*/
@NotNull(message = "qty不能为空")
private Integer qty;
......
......@@ -8,6 +8,7 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.service.IPromotionService;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
......@@ -42,28 +43,26 @@ public class MaterialPromotionService implements IPromotionService {
*/
@Override
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
HashMap<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material> map = getApportionGoodsDetail(calculationDiscountResult);
HashMap<String, MaterialApportion> map = getApportionGoodsDetail(calculationDiscountResult);
if (map != null && !map.isEmpty()) {
for (CartGoods cartGoods : cartGoodsList) {
if (cartGoods.getProductMaterialList().size() == 0) continue;
if (CollectionUtils.isEmpty(cartGoods.getProductMaterialList())) continue;
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material material = map.get(materialGoods.getMaterialId());
MaterialApportion apportion = map.get(materialGoods.getSpuId());
//设置小料行单价和行总价
if (material.getNowPrice() > 0) {
materialGoods.setFinalPrice(material.getNowPrice());
materialGoods.setAmount(material.getNowPrice() * cartGoods.getQty());
}
materialGoods.setFinalPrice(apportion.getSalePrice());
materialGoods.setAmount(apportion.getAmount());
}
}
}
long materialAmount = 0L, materialOriginal = 0L;
for (CartGoods cartGoods : cartGoodsList) {
if (cartGoods.getProductMaterialList().size() == 0) continue;
if (CollectionUtils.isEmpty(cartGoods.getProductMaterialList())) continue;
materialAmount = 0L;
materialOriginal = 0L;
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
materialAmount += materialGoods.getFinalPrice() * cartGoods.getQty();
materialAmount += materialGoods.getAmount();
materialOriginal += materialGoods.getOriginalPrice() * cartGoods.getQty();
}
//设置商品行现总价\行原价 商品总价+小料商品总价
......@@ -83,22 +82,22 @@ public class MaterialPromotionService implements IPromotionService {
*/
@Override
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
HashMap<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material> map = getApportionGoodsDetail(calculationDiscountResult);
HashMap<String, MaterialApportion> map = getApportionGoodsDetail(calculationDiscountResult);
if (map == null && map.isEmpty()) return;
List<ShoppingCartGoodsDto.CartGoodsDetailDto> products = shoppingCartGoodsDto.getProducts();
for (ShoppingCartGoodsDto.CartGoodsDetailDto product : products) {
if (product.getMaterialList().size() == 0) return;
if (CollectionUtils.isEmpty(product.getMaterialList())) continue;
for (ShoppingCartGoodsDto.CartGoodsDetailDto.MaterialGoods materialGoods : product.getMaterialList()) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material material = map.get(materialGoods.getMaterialId());
MaterialApportion material = map.get(materialGoods.getSpuId());
if (material.getApportionAmount().intValue() == 0) continue;
//设置行记录参加的活动及总优惠
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
List<ActivityDiscountsDto> activityDiscountsDtoList = new ArrayList<>();
activityDiscountsDto.setActivityCode(material.getApportionDetails().get(0).getActivityCode());
activityDiscountsDto.setActivityName(material.getApportionDetails().get(0).getActivityName());
activityDiscountsDto.setActivityType(material.getApportionDetails().get(0).getActivityType());
activityDiscountsDto.setDiscountAmount(material.getApportionDetails().get(0).getActivityApportionAmount().intValue());
activityDiscountsDto.setActivityCode(material.getDetails().activityCode);
activityDiscountsDto.setActivityName(material.getDetails().activityName);
activityDiscountsDto.setActivityType(material.getDetails().activityType);
activityDiscountsDto.setDiscountAmount(material.getApportionAmount());
activityDiscountsDtoList.add(activityDiscountsDto);
materialGoods.setActivityDiscountsDtos(activityDiscountsDtoList);
......@@ -106,6 +105,15 @@ public class MaterialPromotionService implements IPromotionService {
product.setProductType(GoodsTypeEnum.MATERIAL.getGoodsType());
}
}
//将小料的价格累加到商品行上
for (ShoppingCartGoodsDto.CartGoodsDetailDto product : products) {
if (CollectionUtils.isEmpty(product.getMaterialList())) continue;
for (ShoppingCartGoodsDto.CartGoodsDetailDto.MaterialGoods materialGoods : product.getMaterialList()) {
product.setSalePrice(product.getSalePrice() + materialGoods.getSalePrice());//现金
product.setOriginalPrice(product.getOriginalPrice() + materialGoods.getOriginalPrice());
product.setTotalDiscountAmount(product.getTotalDiscountAmount() + materialGoods.getTotalDiscountAmount());
}
}
}
/**
......@@ -114,12 +122,13 @@ public class MaterialPromotionService implements IPromotionService {
* @param calculationDiscountResult
* @return
*/
private HashMap<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material> getApportionGoodsDetail(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult) {
private HashMap<String, MaterialApportion> getApportionGoodsDetail(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult) {
// 遍历促销
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getApportionGoods())) {
return null;
}
/*
HashMap<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material> hashMap = new HashMap<>();
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGood : calculationDiscountResult.getApportionGoods()) {
if (CollectionUtils.isEmpty(apportionGood.getSmallMaterial())) continue;
......@@ -128,6 +137,50 @@ public class MaterialPromotionService implements IPromotionService {
}
}
return hashMap;
*/
HashMap<String, MaterialApportion> mApportion = new HashMap<>();
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGood : calculationDiscountResult.getApportionGoods()) {
if (CollectionUtils.isEmpty(apportionGood.getSmallMaterial())) continue;
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material material : apportionGood.getSmallMaterial()) {
if (mApportion.get(material.getGoodsId()) == null) {
MaterialApportion materialApportion = new MaterialApportion();
materialApportion.setSalePrice(material.getNowPrice());
materialApportion.setAmount(material.getNowPrice() * material.getGoodsQuantity());
materialApportion.setApportionAmount(material.getApportionAmount() * material.getGoodsQuantity());
materialApportion.setGoodsId(material.getGoodsId());
ApportionDetails apportionDetails = new ApportionDetails();
apportionDetails.setActivityCode(material.getApportionDetails().get(0).getActivityCode());
apportionDetails.setActivityName(material.getApportionDetails().get(0).getActivityName());
apportionDetails.setActivityType(material.getApportionDetails().get(0).getActivityType());
materialApportion.setDetails(apportionDetails);
mApportion.put(material.getGoodsId(), materialApportion);
continue;
}
MaterialApportion apportion = mApportion.get(material.getGoodsId());
apportion.setSalePrice(apportion.getSalePrice() + material.getNowPrice());
apportion.setAmount(apportion.getAmount() + material.getNowPrice() * material.getGoodsQuantity());
apportion.setApportionAmount(apportion.getApportionAmount() + material.getApportionAmount() * material.getGoodsQuantity());
mApportion.put(material.getGoodsId(), apportion);
}
}
return mApportion;
}
@Data
private class MaterialApportion {
// 累计
private String goodsId;
private Long salePrice;
private Long amount;
private Integer apportionAmount;
private ApportionDetails details;
}
@Data
public class ApportionDetails {
private String activityCode;
private String activityName;
private Integer activityType;
}
}
......@@ -851,13 +851,13 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
calculationDiscountGoods.setMemberDiscount(cartGoods.getMemberDiscount());
//加料
if (cartGoods.getProductMaterialList().size() > 0) {
if (CollectionUtils.isNotEmpty(cartGoods.getProductMaterialList())) {
new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material();
ArrayList<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material> materials = new ArrayList<>();
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material material = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods.Material();
material.setType(1);
material.setGoodsId(materialGoods.getMaterialId());
material.setGoodsId(materialGoods.getSpuId());
material.setGoodsQuantity(cartGoods.getQty());
material.setOriginalPrice(materialGoods.getFinalPrice());
materials.add(material);
......
package cn.freemud.service.impl.mcoffee;
import cn.freemud.adapter.ActivityAdapter;
import cn.freemud.adapter.ShoppingCartConvertAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.ActivityResponseDto;
import cn.freemud.entities.dto.GoodsBeanDto;
import cn.freemud.entities.dto.PromotionMessageDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.user.GetSessionUserInfoDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.OperationTypeEnum;
import cn.freemud.enums.OrderType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.ActivityService;
import cn.freemud.service.impl.AssortmentSdkService;
import cn.freemud.service.impl.FullSubtractionActivityServiceImpl;
import cn.freemud.service.impl.mcoffee.calculation.CalculationServiceImpl;
import cn.freemud.service.thirdparty.CustomerApplicationClient;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import static cn.freemud.constant.ShoppingCartConstant.SHOPPING_CART_EMPTY_GOODS_LIST;
import static cn.freemud.constant.ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ShoppingCartMCoffeeServiceImpl
* @Package cn.freemud.service.impl
* @Description:
* @author: ping1.wu
* @date: 2020/7/21 17:40
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@Service
public class ShoppingCartMCoffeeServiceImpl {
@Autowired
private ActivityAdapter activityAdapter;
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private FullSubtractionActivityServiceImpl fullSubtractionActivityService;
@Autowired
private AssortmentSdkService assortmentSdkService;
@Autowired
private CustomerApplicationClient customerApplicationClient;
@Autowired
private CalculationServiceImpl calculationService;
/**
* 添加商品
*
* @param addShoppingCartGoodsRequestVo
* @return
*/
public BaseResponse addGoods(AddShoppingCartGoodsRequestVo addShoppingCartGoodsRequestVo) {
// TODO: 2020/7/21 参数校验
if (StringUtils.isEmpty(addShoppingCartGoodsRequestVo.getShopId())) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_SHOP_ID_NOT_EMPTY);
}
if (addShoppingCartGoodsRequestVo.getQty() != null && addShoppingCartGoodsRequestVo.getQty() < 0) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_ADD_ERROR);
}
String sessionId = addShoppingCartGoodsRequestVo.getSessionId();
// 获取用户信息
CustomerInfoVo assortmentCustomerInfoVo = getCustomerInfoVo(sessionId);
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = new ShoppingCartGoodsResponseVo();
String userId = assortmentCustomerInfoVo.getMemberId();
String partnerId = addShoppingCartGoodsRequestVo.getPartnerId();
String storeId = addShoppingCartGoodsRequestVo.getShopId();
String appId = addShoppingCartGoodsRequestVo.getAppId();
String spuId = addShoppingCartGoodsRequestVo.getSpuId();
String skuId = StringUtils.isNotBlank(addShoppingCartGoodsRequestVo.getSkuId()) ? addShoppingCartGoodsRequestVo.getSkuId() : "";
String goodsId = StringUtils.isEmpty(skuId) ? spuId : skuId;
String tableNumber = addShoppingCartGoodsRequestVo.getTableNumber();
String menuType = addShoppingCartGoodsRequestVo.getMenuType();
Integer orderType = addShoppingCartGoodsRequestVo.getOrderType();
String receiveId = addShoppingCartGoodsRequestVo.getReceiveId();
CartGoods addCartGoods = ShoppingCartConvertAdapter.convent2CartGoods(addShoppingCartGoodsRequestVo);
// TODO: 2020/7/21 查询购物车缓存
// 注意,围餐和点餐redis数据结构不一样
List<CartGoods> oldCartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, null, shoppingCartBaseService);
if (CollectionUtils.isEmpty(oldCartGoodsList)) {
oldCartGoodsList = new ArrayList<>();
}
String spuId2 = spuId;
List<Long> productIds = new ArrayList<>();
productIds.add(Long.parseLong(goodsId));
// 获取商品详细信息
List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId
, Collections.singletonList(spuId2), menuType, this.shoppingCartBaseService);
setClassificationAndPrice(addCartGoods, productBeanListSpuClass);
//查询多个商品库存信息
Integer checkQty = this.checkSkuQty(oldCartGoodsList, addCartGoods);
// queryManyGoodsStocks(partnerId, storeId, menuType, productIds, productBeanListSpuClass, skuId, checkQty);
// 如果购物车中有商品券,则当前添加的商品是特价商品时,需要提示“已选商品券,与其他优惠商品不同享,商品将恢复原价”
boolean haveCouponProduct = oldCartGoodsList.parallelStream().anyMatch(k -> k.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX));
if (haveCouponProduct && isSpecialGoods(partnerId, storeId, userId, appId, goodsId, orderType)) {
// 如果购物车先加入商品券,再加入促销商品,toast提示“已选商品券,与其他优惠商品不同享,商品将恢复原价”
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, ShoppingCartConstant.HAS_GOODS_COUPON_WHEN_ADD_SPECIAL_GOODS);
}
List<CartGoods> newCartGoods = new ArrayList<>();
newCartGoods.addAll(oldCartGoodsList);
newCartGoods = checkNewCartGoods(newCartGoods, addCartGoods);
// TODO: 2020/7/21 促销活动等价格计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId,
newCartGoods, new ArrayList<>(), new ArrayList<>(), shoppingCartGoodsResponseVo);
// TODO: 2020/7/21 购物车数据更新
newCartGoods = updateCartGoodsLegal(partnerId, storeId, orderType, tableNumber, menuType, userId, addCartGoods, shoppingCartGoodsResponseVo, newCartGoods);
// TODO: 2020/7/21 返回购物车数据
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, newCartGoods, null, ShoppingCartConstant.ADD_AND_UPDATE, null);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
/**
* 更新商品数量
*
* @param updateShoppingCartGoodsQtyRequestVo
* @return
*/
public BaseResponse updateGoodsQty(UpdateShoppingCartGoodsQtyRequestVo updateShoppingCartGoodsQtyRequestVo) {
if (StringUtils.isEmpty(updateShoppingCartGoodsQtyRequestVo.getShopId())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_SHOP_ID_NOT_EMPTY);
}
if (updateShoppingCartGoodsQtyRequestVo.getQty() != null && updateShoppingCartGoodsQtyRequestVo.getQty() < 0) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_ADD_ERROR);
}
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = new ShoppingCartGoodsResponseVo();
CustomerInfoVo assortmentCustomerInfoVo = getCustomerInfoVo(updateShoppingCartGoodsQtyRequestVo.getSessionId());
String userId = assortmentCustomerInfoVo.getMemberId();
String partnerId = updateShoppingCartGoodsQtyRequestVo.getPartnerId();
String storeId = updateShoppingCartGoodsQtyRequestVo.getShopId();
String appId = updateShoppingCartGoodsQtyRequestVo.getAppId();
String cartGoodsUid = updateShoppingCartGoodsQtyRequestVo.getCartGoodsUid();
Integer qty = updateShoppingCartGoodsQtyRequestVo.getQty();
String menuType = updateShoppingCartGoodsQtyRequestVo.getMenuType();
Integer orderType = updateShoppingCartGoodsQtyRequestVo.getOrderType();
String receiveId = updateShoppingCartGoodsQtyRequestVo.getReceiveId();
// 先验证商品是否存在
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, null, shoppingCartBaseService);
CartGoods cartGoods = null;
for (CartGoods cartGoods_ : cartGoodsList) {
if (cartGoodsUid.equals(cartGoods_.getCartGoodsUid())) {
cartGoods = cartGoods_;
cartGoods_.setQty(qty);
break;
}
}
if (cartGoods == null) {
throw new ServiceException(ResponseResult.SHOPPING_CART_UPDATE_ERROR);
}
// 检查购物车商品库存数量
// checkUpdateStock(partnerId, storeId, menuType, qty, cartGoods);
// check购物车中所有商品
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, updateShoppingCartGoodsQtyRequestVo.getOrderType(), "", updateShoppingCartGoodsQtyRequestVo.getMenuType(), shoppingCartBaseService);
cartGoodsList = JSONArray.parseArray(JSONObject.toJSONString(checkCartRequest.getCartGoodsList()), CartGoods.class);
// 重新存储最新购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, updateShoppingCartGoodsQtyRequestVo.getSessionId(), "", shoppingCartBaseService);
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId,
cartGoodsList, new ArrayList<>(), new ArrayList<>(), shoppingCartGoodsResponseVo);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.ADD_AND_UPDATE, null);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
/**
* 购物车商品详情接口
*
* @param shoppingCartInfoRequestVo
* @return
*/
public BaseResponse getGoodsList(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (StringUtils.isEmpty(shoppingCartInfoRequestVo.getShopId())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_SHOP_ID_NOT_EMPTY);
}
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = new ShoppingCartGoodsResponseVo();
// 获取用户信息
CustomerInfoVo assortmentCustomerInfoVo = getCustomerInfoVo(shoppingCartInfoRequestVo.getSessionId());
String userId = assortmentCustomerInfoVo.getMemberId();
String partnerId = shoppingCartInfoRequestVo.getPartnerId();
String storeId = shoppingCartInfoRequestVo.getShopId();
String appId = shoppingCartInfoRequestVo.getAppId();
String couponCode = shoppingCartInfoRequestVo.getCouponCode();
String activityCode = shoppingCartInfoRequestVo.getActivityCode();
String menuType = shoppingCartInfoRequestVo.getMenuType();
Integer orderType = shoppingCartInfoRequestVo.getOrderType();
String receiveId = shoppingCartInfoRequestVo.getReceiveId();
// 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, "", shoppingCartBaseService);
// 如果购物车商品不为空, 则check购物车中所有商品
if (CollectionUtils.isNotEmpty(cartGoodsList)) {
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo.getOrderType(), "", shoppingCartInfoRequestVo.getMenuType(), shoppingCartBaseService);
if (checkCartRequest.getShoppingCartGoodsResponseVo() != null) {
shoppingCartGoodsResponseVo.setChanged(checkCartRequest.getShoppingCartGoodsResponseVo().getChanged());
shoppingCartGoodsResponseVo.setToastMsg(checkCartRequest.getShoppingCartGoodsResponseVo().getToastMsg());
}
cartGoodsList = JSONArray.parseArray(JSONObject.toJSONString(checkCartRequest.getCartGoodsList()), CartGoods.class);
// 重新存储最新购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, assortmentCustomerInfoVo.getSessionId(), "", this.shoppingCartBaseService);
}
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);
}
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId,
cartGoodsList, new ArrayList<>(), new ArrayList<>(), shoppingCartGoodsResponseVo);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
/**
* 清空购物车
*
* @param shoppingCartClearRequestVo
* @return
*/
public BaseResponse clear(ShoppingCartClearRequestVo shoppingCartClearRequestVo) {
String appId = shoppingCartClearRequestVo.getAppId();
if (StringUtils.isBlank(appId)) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING, "appId不能为空");
}
String userId = shoppingCartClearRequestVo.getUserId();
if (StringUtils.isEmpty(userId)) {
CustomerInfoVo userLoginInfoDto = getCustomerInfoVo(shoppingCartClearRequestVo.getSessionId());
userId = userLoginInfoDto.getMemberId();
}
String partnerId = shoppingCartClearRequestVo.getPartnerId();
String storeId = shoppingCartClearRequestVo.getShopId();
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = assortmentSdkService.getCartParamDto(partnerId, storeId, userId);
shoppingCartBaseService.clear(cartParamDto, LogThreadLocal.getTrackingNo());
if (ObjectUtils.equals(shoppingCartClearRequestVo.getOperationType(), OperationTypeEnum.PAY_SUCCESS.getOperationType())) {
return ResponseUtil.success();
}
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = new ShoppingCartGoodsResponseVo();
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, shoppingCartClearRequestVo.getOrderType());
ArrayList<ActivityList> activityList = new ArrayList<>();
PromotionMessageDto promotionMessageDto = fullSubtractionActivityService.getFullPromotionActivityInfo(activityQueryDto, null, activityList);
ActivityTip activityTip = new ActivityTip();
if (promotionMessageDto != null) {
activityTip.setActivityCode(promotionMessageDto.getActivityId());
activityTip.setActivityType(promotionMessageDto.getActivityType());
activityTip.setActivityName(promotionMessageDto.getPromotionMessage());
activityTip.setActivityList(activityList);
}
shoppingCartGoodsResponseVo.setActivityTip(activityTip);
shoppingCartGoodsResponseVo.setProducts(new ArrayList<>());
shoppingCartGoodsResponseVo.setProductsCount(0);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
/**
* 获取购物车商品,添加商品,校验商品合法性,合并商品行,重新set购物车信息到缓存中
*
* @param addCartGoods
* @param userId
* @param shoppingCartGoodsResponseVo
*/
public List<CartGoods> updateCartGoodsLegal(String partnerId, String storeId, Integer orderType, String tableNumber, String menuType, String userId,
CartGoods addCartGoods, ShoppingCartGoodsBaseResponseVo shoppingCartGoodsResponseVo, List<CartGoods> newCartGoods) {
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(newCartGoods, partnerId,
storeId, shoppingCartGoodsResponseVo, orderType, "", menuType, shoppingCartBaseService);
if (checkCartRequest.getShoppingCartGoodsResponseVo() != null) {
shoppingCartGoodsResponseVo.setToastMsg(checkCartRequest.getShoppingCartGoodsResponseVo().getToastMsg());
shoppingCartGoodsResponseVo.setChanged(checkCartRequest.getShoppingCartGoodsResponseVo().getChanged());
}
List<CartGoods> allCartGoodsList = JSONArray.parseArray(JSONObject.toJSONString(checkCartRequest.getCartGoodsList()), CartGoods.class);
// 重新set购物车信息到缓存中
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, allCartGoodsList, null, tableNumber, this.shoppingCartBaseService);
return allCartGoodsList;
}
/**
* 组装添加商品和更新商品和查询的响应信息
* <p>
* 查询购物车计算包装费
*
* @param shoppingCartGoodsResponseVo
* @param cartGoodsList
* @param toastMsg
* @param opt
* @param shoppingCartInfoRequestVo
*/
private void setAddAndUpdateResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, List<CartGoods> cartGoodsList,
String toastMsg, String opt, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
shoppingCartGoodsResponseVo.setProducts(cartGoodsList);
shoppingCartGoodsResponseVo.setProductsCount(cartGoodsList.size());
if (StringUtils.isNotEmpty(toastMsg)) {
toastMsg = shoppingCartInfoRequestVo != null && ObjectUtils.equals(1, shoppingCartInfoRequestVo.getFlag()) ? SHOPPING_CART_EMPTY_GOODS_LIST : SHOPPING_CART_INVALIAD_GOODS;
setToastMsgIfNotExist(shoppingCartGoodsResponseVo, toastMsg);
//结算页,只有商品全部非法(即products为空)时,才提示changed为true toastMsg 不为空
if (shoppingCartInfoRequestVo != null && ObjectUtils.equals(1, shoppingCartInfoRequestVo.getFlag())) {
shoppingCartGoodsResponseVo.setChanged(CollectionUtils.isEmpty(cartGoodsList));
shoppingCartGoodsResponseVo.setToastMsg(CollectionUtils.isEmpty(cartGoodsList) ? toastMsg : "");
}
}
// 更新和添加商品时不需要包装费
if (ShoppingCartConstant.ADD_AND_UPDATE.equals(opt)) {
shoppingCartGoodsResponseVo.setNewPackAmount(null);
return;
}
if (shoppingCartGoodsResponseVo.getNewPackAmount() == null || shoppingCartGoodsResponseVo.getNewPackAmount() == 0L) {
return;
}
if (shoppingCartInfoRequestVo != null && Objects.equals(shoppingCartInfoRequestVo.getReachStoreType(), OrderType.EAT_IN.getCode())) {
shoppingCartGoodsResponseVo.setNewPackAmount(null);
} else {
Long packAmount = shoppingCartGoodsResponseVo.getNewPackAmount();
Long originalTotalAmount = shoppingCartGoodsResponseVo.getOriginalTotalAmount() + packAmount;
Long totalAmount = shoppingCartGoodsResponseVo.getTotalAmount() + packAmount;
shoppingCartGoodsResponseVo.setOriginalTotalAmount(originalTotalAmount);
shoppingCartGoodsResponseVo.setTotalAmount(totalAmount);
}
}
/**
* 检查sku数量
*
* @param oldCartGoodsList
* @param addCartGoods
* @return
*/
private Integer checkSkuQty(List<CartGoods> oldCartGoodsList, CartGoods addCartGoods) {
Integer qty = addCartGoods.getQty() == null ? 0 : addCartGoods.getQty();
if (CollectionUtils.isNotEmpty(oldCartGoodsList)) {
for (CartGoods goods : oldCartGoodsList) {
if (goods.getSkuId().equals(addCartGoods.getSkuId()) && goods.getSpuId().equals(addCartGoods.getSpuId())) {
qty += goods.getQty();
}
}
}
return qty;
}
private List<CartGoods> checkNewCartGoods(List<CartGoods> newCartGoods, CartGoods addCartGoods) {
Integer qty = addCartGoods.getQty() == null ? 0 : addCartGoods.getQty();
if (CollectionUtils.isNotEmpty(newCartGoods)) {
for (CartGoods goods : newCartGoods) {
if (goods.getSkuId().equals(addCartGoods.getSkuId()) && goods.getSpuId().equals(addCartGoods.getSpuId())) {
qty += goods.getQty();
goods.setQty(qty);
break;
}
}
} else {
newCartGoods.add(addCartGoods);
}
return newCartGoods;
}
private void setToastMsgIfNotExist(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, String message) {
if (StringUtils.isEmpty(shoppingCartGoodsResponseVo.getToastMsg())) {
shoppingCartGoodsResponseVo.setToastMsg(message);
}
}
/**
* 查询用户信息
* @param sessionId
* @return
*/
private CustomerInfoVo getCustomerInfoVo(String sessionId) {
GetSessionUserInfoDto getSessionUserInfoDto = new GetSessionUserInfoDto();
getSessionUserInfoDto.setIsGetPaid(true);
getSessionUserInfoDto.setSessionId(sessionId);
BaseResponse<CustomerInfoVo> sessionUserInfo = customerApplicationClient.getSessionUserInfo(getSessionUserInfoDto);
if (sessionUserInfo == null || !ResponseResult.SUCCESS.getCode().equals(sessionUserInfo.getCode()) || sessionUserInfo.getResult() == null || sessionUserInfo.getResult().getMemberId() == null) {
throw new ServiceException(ResponseResult.NOT_LOGIN);
}
return sessionUserInfo.getResult();
}
private boolean isSpecialGoods(String partnerId, String storeId, String userId, String appId, String goodsId, Integer orderType) {
boolean isSpecialGoods = false;
ActivityAdapter activityAdapter = SDKCommonBaseContextWare.getBean(ActivityAdapter.class);
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, orderType);
ActivityService activityService = SDKCommonBaseContextWare.getBean(ActivityService.class);
ActivityQueryResponseDto activityQueryResponseDto = activityService.queryActivitys(activityQueryDto, ActivityTypeEnum.TYPE_2, null);
if (activityQueryResponseDto == null || activityQueryResponseDto.getResult() == null) {
return isSpecialGoods;
}
List<ActivityResponseDto> activityResponseDtoList = activityQueryResponseDto.getResult();
for (int i = 0, len = activityResponseDtoList.size(); i < len; i++) {
List<GoodsBeanDto> goodsBeanDtos = activityResponseDtoList.get(i).getGoods();
if (CollectionUtils.isEmpty(goodsBeanDtos)) {
continue;
}
boolean match = goodsBeanDtos.stream().anyMatch(k -> k.getGoodsId().equals(goodsId));
if (match) {
isSpecialGoods = true;
break;
}
}
return isSpecialGoods;
}
public static void setClassificationAndPrice(CartGoods cartGoods, List<ProductBeanDTO> productBeanListSpuClass) {
cartGoods.setClassificationId(productBeanListSpuClass.get(0).getCategory());
cartGoods.setClassificationName(productBeanListSpuClass.get(0).getCategoryName());
cartGoods.setOriginalPrice(productBeanListSpuClass.get(0).getOriginalPrice());
cartGoods.setFinalPrice(productBeanListSpuClass.get(0).getFinalPrice());
cartGoods.setPackPrice(productBeanListSpuClass.get(0).getPackPrice());
}
}
package cn.freemud.service.impl.mcoffee.calculation;
import cn.freemud.adapter.ActivityAdapter;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityChannelEnum;
import cn.freemud.enums.CouponFlag;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CommonService;
import cn.freemud.service.thirdparty.ActivityClient;
import cn.freemud.utils.PropertyConvertUtil;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest;
import com.freemud.application.sdk.api.membercenter.response.QueryReceiveAddressResponse;
import com.freemud.application.sdk.api.membercenter.service.MemberCenterService;
import com.freemud.application.sdk.api.storecenter.request.QueryDeliveryRequest;
import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import lombok.extern.slf4j.Slf4j;
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.util.*;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CalculationServiceImpl
* @Package cn.freemud.service.impl
* @Description:
* @author: shuhu.hou
* @date: 2020/6/11 17:06
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@Service
public class CalculationServiceImpl {
@Autowired
private MemberCenterService memberCenterService;
@Autowired
private StoreCenterService storeCenterService;
@Autowired
private CommonService commonService;
@Autowired
private ActivityClient activityClient;
@Autowired
private ActivityAdapter activityAdapter;
@Autowired
private TimeSaleCalculation timeSaleCalculation;
@Autowired
private FullPromotionCalculation fullPromotionCalculation;
@Autowired
private CouponDiscountCalculation couponDiscountCalculation;
/**
* 更新购物车行优惠信息
*/
public void updateShoppingCartGoodsDiscount(String partnerId, String storeId, String userId, String appId, Integer orderType,
boolean isMember, String menuType, String receiveId,
List<CartGoods> cartGoodsList, List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons,
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, appId, shoppingCartGoodsResponseVo);
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, orderType);
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscount = getCalculationDiscount(partnerId, storeId, userId, appId, orderType, isMember,
menuType, deliveryAmount, cartGoodsList, coupons, sendGoodsList);
updateDiscount(calculationDiscount, cartGoodsList, shoppingCartGoodsResponseVo);
//满减
fullPromotionCalculation.updateShoppingCartGoodsDiscount(activityQueryDto, calculationDiscount, cartGoodsList, shoppingCartGoodsResponseVo);
//限时特价
timeSaleCalculation.TimeSaleUpdateShoppingCartGoodsDiscount(calculationDiscount, cartGoodsList, shoppingCartGoodsResponseVo);
CouponPromotionVO couponPromotionVO = new CouponPromotionVO();
couponPromotionVO.setPartnerId(partnerId);
couponPromotionVO.setUserId(userId);
couponPromotionVO.setStoreId(storeId);
couponPromotionVO.setCouponCode(null);
couponPromotionVO.setOrderType(orderType);
couponPromotionVO.setFlg(CouponFlag.YES.getCode());
//优惠券
couponDiscountCalculation.updateShoppingCartGoodsDiscountCoupon(couponPromotionVO,calculationDiscount,cartGoodsList, shoppingCartGoodsResponseVo);
}
public ActivityCalculationDiscountResponseDto.CalculationDiscountResult getCalculationDiscount(
String partnerId, String storeId, String userId, String appId, Integer orderType, boolean isMember, String menuType, Long deliveryAmount,
List<CartGoods> cartGoodsList, List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons, List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList) {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList = new ArrayList<>();
for (CartGoods cartGoods : cartGoodsList) {
addCalculationDiscountGoods(calculationDiscountGoodsList, cartGoods.getGoodsId(), cartGoods.getQty(), cartGoods.getFinalPrice(), cartGoods.getMemberDiscount());
}
if (BusinessTypeEnum.SAAS_DELIVERY.getCode().equals(menuType)) {
deliveryAmount = null;
}
// 当加价购商品不为空时
if (CollectionUtils.isNotEmpty(sendGoodsList)) {
for (ShoppingCartInfoRequestVo.SendGoods sendGoods : sendGoodsList) {
this.addCalculationDiscountGoods(calculationDiscountGoodsList, sendGoods.getGoodsId(), sendGoods.getQty(), sendGoods.getOriginalPrice(), 100);
}
}
calculationDiscountGoodsList.removeIf(calculationDiscountGoods -> (calculationDiscountGoods.getGoodsQuantity().equals(0)));
if (CollectionUtils.isEmpty(calculationDiscountGoodsList)) {
return null;
}
ActivityCalculationDiscountRequestDto discountRequest = getActivityCalculationDiscountRequestDto(partnerId, storeId, userId, appId, orderType);
discountRequest.setGoods(calculationDiscountGoodsList);
discountRequest.setCoupons(coupons);
discountRequest.setOrgIds(commonService.getOrgIds(partnerId, storeId));
discountRequest.setDistributionFee(deliveryAmount);
discountRequest.setIsMember(isMember);
ActivityCalculationDiscountResponseDto activityCalculationDiscountResponseDto;
try {
activityCalculationDiscountResponseDto = activityClient.calculationDiscountSharing(discountRequest);
} catch (Exception ex) {
ErrorLog.printErrorLog("calculation_discount_error", "/calculation/discount/sharding", discountRequest, ex);
throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
}
// 返回成功
if (activityCalculationDiscountResponseDto == null || !StringUtils.equals(activityCalculationDiscountResponseDto.getStatusCode(), ResponseCodeConstant.RESPONSE_SUCCESS_STR)) {
throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
}
return activityCalculationDiscountResponseDto.getResult();
}
/**
* 配送金额
*/
private Long calculateDeliveryAmount(String receiveId, String partnerId, String storeId, String wxappid, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
Long deliveryAmount = 0L;
if (StringUtils.isBlank(receiveId)) {
return deliveryAmount;
}
log.info("获取配送配逻辑 tackingNo:{},receiveId:{},partnerId:{},storeId:{}", LogThreadLocal.getTrackingNo(), receiveId, partnerId, storeId);
String trackingNo = LogThreadLocal.getTrackingNo();
QueryReceiveAddressRequest queryReceive = new QueryReceiveAddressRequest(receiveId, partnerId);
//查询会员后货地址经纬度
com.freemud.application.sdk.api.base.BaseResponse<QueryReceiveAddressResponse> queryReceiveAddressResponse = memberCenterService.queryReceiveAddressById(queryReceive, trackingNo);
if (!ResponseResult.SUCCESS.getCode().equals(queryReceiveAddressResponse.getCode()) || queryReceiveAddressResponse.getData() == null) {
throw new ServiceException(ResponseResult.USER_GETRECEIVEADDRESS_ERROR);
}
QueryDeliveryRequest queryDeliveryRequest = new QueryDeliveryRequest();
queryDeliveryRequest.setPartnerId(partnerId);
queryDeliveryRequest.setStoreCode(storeId);
queryDeliveryRequest.setUserLatitude(queryReceiveAddressResponse.getData().getLatitude());
queryDeliveryRequest.setUserLongitude(queryReceiveAddressResponse.getData().getLongitude());
com.freemud.application.sdk.api.base.BaseResponse<QueryDeliverDetailResponse> queryDeliverDetailResponse = storeCenterService.queryDeliverDetail(queryDeliveryRequest, trackingNo);
if (queryDeliverDetailResponse == null || !ResponseResult.SUCCESS.getCode().equals(queryDeliverDetailResponse.getCode()) || queryDeliverDetailResponse.getData() == null) {
throw new ServiceException(ResponseResult.STORE_ITEM_NOT_DELIVERY);
}
if (queryDeliverDetailResponse.getData().getDeliveryAmount() == null) {
throw new ServiceException(ResponseResult.STORE_DELIVERY_AMOUNT_ERROR);
}
shoppingCartGoodsResponseVo.setDeliveryFeeZeroReason(queryDeliverDetailResponse.getData().getDeliveryFeeZeroReason() != null ? queryDeliverDetailResponse.getData().getDeliveryFeeZeroReason() : 0);
deliveryAmount = queryDeliverDetailResponse.getData().getDeliveryAmount();
return deliveryAmount;
}
/**
* 构建 ActivityCalculationDiscountRequestDto
*
* @param partnerId
* @param storeId
* @param userId
* @param appId
* @param orderType
* @return
*/
private ActivityCalculationDiscountRequestDto getActivityCalculationDiscountRequestDto(String partnerId, String storeId, String userId, String appId, Integer orderType) {
ActivityCalculationDiscountRequestDto activityCalculationDiscountRequestDto = new ActivityCalculationDiscountRequestDto();
activityCalculationDiscountRequestDto.setPartnerCode(partnerId);
activityCalculationDiscountRequestDto.setStoreId(storeId);
activityCalculationDiscountRequestDto.setIsShowGoodsActivity(1);
activityCalculationDiscountRequestDto.setUserId(userId);
activityCalculationDiscountRequestDto.setVer(1);
activityCalculationDiscountRequestDto.setAppId(appId);
ActivityChannelEnum activityChannelEnum = PropertyConvertUtil.orderTypeConvert2ActivityChannel(orderType);
if (!Objects.isNull(activityChannelEnum)) {
activityCalculationDiscountRequestDto.setChannel(activityChannelEnum.getCode());
}
return activityCalculationDiscountRequestDto;
}
/**
* 将calculationDiscountGoods 封装后加入 calculationDiscountGoodsList
*
* @param calculationDiscountGoodsList
* @param goodsId
* @param goodsQuantity
* @param originalPrice
*/
private void addCalculationDiscountGoods(List<ActivityCalculationDiscountRequestDto.CalculationDiscountGoods> calculationDiscountGoodsList,
String goodsId, Integer goodsQuantity, Long originalPrice, Integer memberDiscount) {
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods calculationDiscountGoods = new ActivityCalculationDiscountRequestDto.CalculationDiscountGoods();
calculationDiscountGoods.setGoodsId(goodsId);
calculationDiscountGoods.setGoodsQuantity(goodsQuantity);
calculationDiscountGoods.setOriginalPrice(originalPrice);
calculationDiscountGoods.setMemberDiscount(memberDiscount);
//累加需加入计算的商品
int index;
// 当商品已存在时,需累加数量
if ((index = calculationDiscountGoodsList.indexOf(calculationDiscountGoods)) >= 0) {
ActivityCalculationDiscountRequestDto.CalculationDiscountGoods oldCalculationDiscountGoods = calculationDiscountGoodsList.get(index);
oldCalculationDiscountGoods.setGoodsQuantity(oldCalculationDiscountGoods.getGoodsQuantity() + calculationDiscountGoods.getGoodsQuantity());
} else {
calculationDiscountGoodsList.add(calculationDiscountGoods);
}
}
private void updateDiscount(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscount, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
long totalOriginalAmount = 0L;
long totalAmount = 0L;
long totalPackgeAmount = 0L;
for (CartGoods cartGoods : cartGoodsList) {
// 设置商品原价与商品现价的初始值
long originalAmount = cartGoods.getOriginalPrice() * cartGoods.getQty();
long amount = cartGoods.getOriginalPrice() * cartGoods.getQty();
long packAmount = cartGoods.getPackPrice() * cartGoods.getQty();
totalOriginalAmount += originalAmount;
totalAmount += amount;
totalPackgeAmount += packAmount;
cartGoods.setOriginalAmount(originalAmount);
cartGoods.setAmount(amount);
cartGoods.setPackPrice(packAmount);
}
shoppingCartGoodsResponseVo.setOriginalTotalAmount(calculationDiscount == null ? totalOriginalAmount : calculationDiscount.getOriginalTotalAmount());
shoppingCartGoodsResponseVo.setTotalAmount(calculationDiscount == null ? totalAmount : calculationDiscount.getTotalAmount());
shoppingCartGoodsResponseVo.setNewPackAmount(totalPackgeAmount);
shoppingCartGoodsResponseVo.setTotalDiscountAmount(calculationDiscount == null ? 0L : calculationDiscount.getTotalDiscountAmount());
}
}
package cn.freemud.service.impl.mcoffee.calculation;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.vo.ActivityClassifyCouponBean;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CouponPromotionVO;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.enums.CouponFlag;
import cn.freemud.service.CouponService;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponDiscountCalculation
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/3 16:02
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class CouponDiscountCalculation {
@Autowired
private CouponService couponService;
public void updateShoppingCartGoodsDiscountCoupon(CouponPromotionVO couponPromotionVO, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
// 用户选择了查询优惠券信息
if (couponPromotionVO != null && ObjectUtils.equals(CouponFlag.YES.getCode(), couponPromotionVO.getFlg())) {
List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> k.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)).collect(Collectors.toList());
// 是否存在商品券
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
// 构建可用不可用优惠券
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList, couponPromotionVO.getPartnerId()
, couponPromotionVO.getUserId(), couponPromotionVO.getStoreId(), couponPromotionVO.getCouponCode(), hasGoodssCoupon, couponPromotionVO.getOrderType());
if (Objects.equals(activityClassifyCouponBean, null)) {
// 构建一个空得订单券信息
activityClassifyCouponBean = new ActivityClassifyCouponBean();
activityClassifyCouponBean.setCouponNum(0);
activityClassifyCouponBean.setDisableCouponNum(0);
activityClassifyCouponBean.setUsableCouponNum(0);
activityClassifyCouponBean.setDisableCoupons(Lists.newArrayList());
activityClassifyCouponBean.setUsableCoupons(Lists.newArrayList());
}
shoppingCartGoodsResponseVo.setAvailableCoupon(activityClassifyCouponBean);
}
// 当couponCode不为空时,需计算优惠价格
long couponDiscount = 0;
if (couponPromotionVO != null && StringUtils.isNotEmpty(couponPromotionVO.getCouponCode())
&& calculationDiscountResult != null) {
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults> couponResultsList = calculationDiscountResult.getCouponDiscounts();
if (CollectionUtils.isNotEmpty(couponResultsList)) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.CouponResults couponResults : couponResultsList) {
couponDiscount = couponDiscount + (couponResults.getDiscountAmount() == null ? 0 : couponResults.getDiscountAmount());
}
}
}
shoppingCartGoodsResponseVo.setCouponDiscount(couponDiscount);
//循环购物车商品券
for (CartGoods cartGoods : cartGoodsList) {
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
String spqId = cartGoods.getCartGoodsUid().substring(CommonsConstant.COUPON_PREFIX.length());
// 计算优惠信息时,已将券校验过,放在map中
Map<String, CheckSpqInfoResponseDto> validCouponMap = calculationDiscountResult == null ? new HashMap<>() : calculationDiscountResult.getValidCouponMap();
if (MapUtils.isNotEmpty(validCouponMap)) {
CheckSpqInfoResponseDto checkSpqInfoResponseDto = validCouponMap.get(spqId);
if (checkSpqInfoResponseDto != null) {
cartGoods.setOriginalPrice(checkSpqInfoResponseDto.getPrice());
cartGoods.setSpuId(checkSpqInfoResponseDto.getSpuId());
cartGoods.setSkuId(StringUtils.isEmpty(checkSpqInfoResponseDto.getSkuId()) ? checkSpqInfoResponseDto.getSpuId() : checkSpqInfoResponseDto.getSkuId());
cartGoods.setQty(1);
cartGoods.setCouponCode(checkSpqInfoResponseDto.getCouponCode());
cartGoods.setSpuName(checkSpqInfoResponseDto.getSpuName());
}
}
}
}
}
}
package cn.freemud.service.impl.mcoffee.calculation;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.ActivityResponseDto;
import cn.freemud.entities.dto.BenefitBeanDto;
import cn.freemud.entities.dto.PromotionMessageDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.vo.ActivityList;
import cn.freemud.entities.vo.ActivityTip;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.ActivityService;
import cn.freemud.utils.WebUtil;
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.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: FullPromotionCalculation
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/3 16:05
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class FullPromotionCalculation {
@Autowired
private ActivityService activityService;
public void updateShoppingCartGoodsDiscount(ActivityQueryDto activityQueryDto, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> allCartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
shoppingCartGoodsResponseVo.setActivityTip(new ActivityTip());
List<ActivityTypeEnum> activityTypeEnums = new LinkedList<>();
activityTypeEnums.add(ActivityTypeEnum.TYPE_11);
activityTypeEnums.add(ActivityTypeEnum.TYPE_12);
//调用促销统一活动查询
//过滤出参与的满减(目前只有每满减和阶梯满减)
ActivityQueryResponseDto activityQueryResponseDto = activityService.queryActivityByType(activityQueryDto, activityTypeEnums, null);
if (activityQueryResponseDto == null) {
return;
}
List<ActivityResponseDto> activityQueryDtoList = activityQueryResponseDto.getResult();
if (CollectionUtils.isEmpty(activityQueryDtoList)) {
return;
}
PromotionMessageDto promotionMessageDto = new PromotionMessageDto();
ActivityResponseDto activityResponseDto = activityQueryDtoList.get(0);
promotionMessageDto.setActivityId(activityResponseDto.getActivityCode());
promotionMessageDto.setActivityName(activityResponseDto.getActivityName());
promotionMessageDto.setActivityType(activityResponseDto.getActivityType());
promotionMessageDto.setPromotionAmount(0L);
StringBuilder messageBuilder = new StringBuilder();
ArrayList<ActivityList> activityList = new ArrayList<>();
//没有加入购物车
if (calculationDiscountResult == null) {
// 因为没有促销活动的计算信息,所以没有加入购物车内
List<BenefitBeanDto> benefitBeanDtos = activityResponseDto.getBenefits();
BenefitBeanDto benefitBeanDto = benefitBeanDtos.get(0);
//调用没有加入购物车的提示语的方法
setMessageNotInShoppingCart(messageBuilder, activityResponseDto, benefitBeanDtos, benefitBeanDto, activityList);
} else {
//促销返回满减提示语
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt> activityPrompts = calculationDiscountResult.getActivityPrompts();
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discountList1 = calculationDiscountResult.getDiscounts();
//构建提示语
if (CollectionUtils.isNotEmpty(activityPrompts)) {
setMessageSatisfyCart(messageBuilder, activityPrompts, activityResponseDto, activityList);
} else {
setMessageNoSatisfyCart(messageBuilder, discountList1, activityList);
}
}
promotionMessageDto.setPromotionMessage(messageBuilder.toString());
ActivityTip activityTip = new ActivityTip();
activityTip.setActivityCode(promotionMessageDto.getActivityId());
activityTip.setActivityType(promotionMessageDto.getActivityType());
activityTip.setActivityName(promotionMessageDto.getPromotionMessage());
activityTip.setActivityList(activityList);
shoppingCartGoodsResponseVo.setActivityTip(activityTip);
if (calculationDiscountResult == null) {
return;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discountList = calculationDiscountResult.getDiscounts();
if (CollectionUtils.isEmpty(discountList)) {
return;
}
//过滤出参与的满减(目前只有每满减和阶梯满减)
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> fullDiscountsList = discountList
.stream().filter(discount -> ActivityTypeEnum.TYPE_11.getCode().equals(discount.getType()) || ActivityTypeEnum.TYPE_12.getCode().equals(discount.getType()))
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(fullDiscountsList)) {
return;
}
//总的满减优惠金额
long fullDiscount = 0L;
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount fullDiscounts : fullDiscountsList) {
fullDiscount = fullDiscount + (fullDiscounts.getDiscount() == null ? 0 : fullDiscounts.getDiscount());
}
//设置到响应中
shoppingCartGoodsResponseVo.setFullDiscount(fullDiscount);
shoppingCartGoodsResponseVo.setProducts(allCartGoodsList);
shoppingCartGoodsResponseVo.setProductsCount(allCartGoodsList.size());
}
//设置没有加入购物车的提示语
private void setMessageNotInShoppingCart(StringBuilder messageBuilder, ActivityResponseDto activityResponseDto, List<BenefitBeanDto> benefitBeanDtos, BenefitBeanDto benefitBeanDto,
ArrayList<ActivityList> activityList) {
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) {
messageBuilder.append("每满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanDto.getThresholdAmount() * 1.00 / 100))
.append("</span> 减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanDto.getDiscountAmount() * 1.00 / 100))
.append("</span> ")
.append("最高减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityResponseDto.getMaxMoney() * 1.00 / 100))
.append("</span> 元");
//满足 x 元 减 Y 元 ,最高 减 Z元
cn.freemud.entities.vo.ActivityList notInShopping = new ActivityList();
notInShopping.setTipType(1);
notInShopping.setSatisfy(WebUtil.formatAmount(benefitBeanDto.getThresholdAmount() * 1.00 / 100).toString());
notInShopping.setDeduct(WebUtil.formatAmount(benefitBeanDto.getDiscountAmount() * 1.00 / 100).toString());
notInShopping.setMaxDeduct(WebUtil.formatAmount(activityResponseDto.getMaxMoney() * 1.00 / 100).toString());
activityList.add(notInShopping);
}
if (Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), activityResponseDto.getActivityType())) {
int len = benefitBeanDtos.size();
// // 购物车中无商品或者存在与满减互斥的活动
for (int i = len - 1; i >= 0; i--) {
benefitBeanDto = benefitBeanDtos.get(i);
messageBuilder.append("满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanDto.getThresholdAmount() * 1.00 / 100))
.append("</span> 减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(benefitBeanDto.getDiscountAmount() * 1.00 / 100))
.append("</span> 元");
if (i > 0) messageBuilder.append(",");
}
// 阶梯满减:满足 X 元 减 Y 元,
for (int j = len - 1; j >= 0; j--) {
benefitBeanDto = benefitBeanDtos.get(j);
cn.freemud.entities.vo.ActivityList notInShopping = new ActivityList();
notInShopping.setTipType(2);
notInShopping.setSatisfy(WebUtil.formatAmount(benefitBeanDto.getThresholdAmount() * 1.00 / 100).toString());
notInShopping.setDeduct(WebUtil.formatAmount(benefitBeanDto.getDiscountAmount() * 1.00 / 100).toString());
activityList.add(notInShopping);
}
}
}
/**
* 设置加入商品满足购物车时的提示语
*
* @param messageBuilder
* @param activityPrompts
* @param activityResponseDto
*/
private void setMessageSatisfyCart(StringBuilder messageBuilder, List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt> activityPrompts
, ActivityResponseDto activityResponseDto, ArrayList<ActivityList> activityList) {
ActivityList satisfyList = new ActivityList();
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ActivityPrompt activityPrompt = activityPrompts.get(0);
if (activityPrompt.getAlreadyDiscountAmount() == null
|| activityPrompt.getAlreadyDiscountAmount() == 0) {
messageBuilder.append("满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100))
.append("</span> 减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100))
.append("</span> ")
.append("还差 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
.append("</span> 元");
// 满足 X 元 减 Y 元 还差 Z元
satisfyList.setTipType(3);
satisfyList.setSatisfy(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100).toString());
satisfyList.setDeduct(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100).toString());
satisfyList.setMissing(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100).toString());
} else {
Long toDiscountAmout;
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) {
toDiscountAmout = activityPrompt.getDiscountAmout() + activityPrompt.getAlreadyDiscountAmount();
} else {
toDiscountAmout = activityPrompt.getDiscountAmout();
}
//已减 X 元 再买 Y 元 减 Z 元
messageBuilder.append("已减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getAlreadyDiscountAmount() * 1.00 / 100))
.append("</span> 元 再买 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
.append("</span> 元减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(toDiscountAmout * 1.00 / 100))
.append("</span> 元");
satisfyList.setTipType(4);
satisfyList.setDeduct(WebUtil.formatAmount(activityPrompt.getAlreadyDiscountAmount() * 1.00 / 100).toString());
satisfyList.setAgainBuy(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100).toString());
satisfyList.setAgianDeduct(WebUtil.formatAmount(toDiscountAmout * 1.00 / 100).toString());
}
activityList.add(satisfyList);
}
/**
* 设置加入商品不满足购物车时的提示语
*
* @param messageBuilder
* @param discountList
*/
private void setMessageNoSatisfyCart(StringBuilder messageBuilder, List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Discount> discountList, ArrayList<ActivityList> activityList) {
discountList = discountList.parallelStream().filter(k -> (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), k.getType())
|| Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), k.getType()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(discountList)) {
return;
}
//已减 X 元
messageBuilder.append("已减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(discountList.get(0).getDiscount() * 1.00 / 100))
.append("</span> 元");
ActivityList noSatisfy = new ActivityList();
noSatisfy.setTipType(5);
noSatisfy.setDeduct(WebUtil.formatAmount(discountList.get(0).getDiscount() * 1.00 / 100).toString());
activityList.add(noSatisfy);
}
}
package cn.freemud.service.impl.mcoffee.calculation;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.enums.ActivityTypeEnum;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: TimeSaleCalculation
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/3 16:07
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Service
public class TimeSaleCalculation {
/**
* 限时特价
*
* @return
*/
public void TimeSaleUpdateShoppingCartGoodsDiscount(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts())
|| !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()) || (ActivityTypeEnum.TYPE_21.getCode().equals(discount.getType()))))) {
return;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
if (CollectionUtils.isEmpty(goodsList)) {
return;
}
String toastMsg = null;
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1));
// 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量
Map<String, Integer> numberMap = new HashMap<>();
List<Integer> discounts = Arrays.asList(ActivityTypeEnum.TYPE_2.getCode(), ActivityTypeEnum.TYPE_21.getCode());
for (CartGoods cartGoods : cartGoodsList) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods;
if ((goods = goodsMap.get(cartGoods.getGoodsId())) == null) {
continue;
}
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = getGoodsDiscount(goods.getDiscounts(), discounts);
if (goodsDiscount == null) {
continue;
}
// 享受限时特价折扣的商品数量
Integer specialActualGoodsNumber = null;
// 商品现价
Long goodsNowPrice = cartGoods.getOriginalPrice() - goodsDiscount.getDiscount() / goodsDiscount.getActualGoodsNumber();
// numberMap用于暂存当前商品行可享受限时特价折扣的商品数量
if ((specialActualGoodsNumber = numberMap.get(goods.getGoodsId())) == null) {
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber = goodsDiscount.getActualGoodsNumber());
}
//若可享受数量>=当前商品行的商品数量
if (specialActualGoodsNumber - cartGoods.getQty() >= 0) {
cartGoods.setAmount(goodsNowPrice * cartGoods.getQty());
} else {
//总价=可享受数量*优惠后单价+(当前商品行的商品数量-可享受数量)*商品原价
cartGoods.setAmount(specialActualGoodsNumber > 0 ? specialActualGoodsNumber * goodsNowPrice + (cartGoods.getQty() - specialActualGoodsNumber) * cartGoods.getOriginalPrice()
: goods.getOriginalPrice() * cartGoods.getQty());
if (StringUtils.isEmpty(toastMsg)) {
toastMsg = "该商品限" + goodsDiscount.getActualGoodsNumber() + "份优惠 超出按照原价计算哦";
}
}
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber - cartGoods.getQty());
}
if (StringUtils.isNotBlank(toastMsg)) {
shoppingCartGoodsResponseVo.setToastMsg(toastMsg);
}
}
/**
* 获取指定促销类型的GoodsDiscount
*
* @param goodsDiscountList
* @param discounts
* @return
*/
private ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount getGoodsDiscount(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> goodsDiscountList, List<Integer> discounts) {
if (CollectionUtils.isEmpty(goodsDiscountList)) {
return null;
}
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount : goodsDiscountList) {
if (discounts.contains(goodsDiscount.getType())) {
return goodsDiscount;
}
}
return null;
}
/**
* 获取指定促销类型的ApportionDetails
*
* @param apportionDetailsList
* @param type
* @return
*/
private ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails getApportionDetails(List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails> apportionDetailsList, ActivityTypeEnum type) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails apportionDetails : apportionDetailsList) {
if (Objects.equals(apportionDetails.getActivityType(), ActivityTypeEnum.TYPE_2.getCode())) {
return apportionDetails;
}
}
return null;
}
}
......@@ -46,4 +46,14 @@ public interface ActivityClient {
*/
@PostMapping("/activity/stock/cancelStock")
ActivityBaseResponseDto cancelStock(ActivityCancelStockRequestDto activityCancelStockRequestDto);
/**
* 新版优惠均摊计算
* @param activityCalculationDiscountRequestDto
* @return
*/
@PostMapping("/calculation/discount/sharing")
ActivityCalculationDiscountResponseDto calculationDiscountSharing(ActivityCalculationDiscountRequestDto activityCalculationDiscountRequestDto);
}
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