Commit 030dfc62 by zhiheng.zhang

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

parents f9dffb1f b1f43654
......@@ -742,10 +742,6 @@ public class OrderSdkAdapter {
List<OrderItemResp> parentOrderItemList = orderItemList == null ? new ArrayList<>() : orderItemList.stream()
.filter(item -> StringUtils.isEmpty(item.getParentProductId()) || ObjectUtils.equals("0", item.getParentProductId()))
.collect(Collectors.toList());
List<OrderItemResp> materailProductItemList = orderItemList == null ? new ArrayList<>() : orderItemList.stream()
.filter(item -> StringUtils.isNotBlank(item.getParentProductId()) && ObjectUtils.equals(ProductTypeEnum.MATERAIL_PRODUCT.getCode(), item.getProductType()))
.collect(Collectors.toList());
for (OrderItemResp orderItem : parentOrderItemList) {
QueryOrdersResponse.DataBean.OrderBean.ProductBean productBean = getOldOrderProduct(orderSettlementResps, orderItem);
if (ObjectUtils.equals(ProductTypeEnum.SETMEAL_PRODUCT.getCode(), orderItem.getProductType()) || ObjectUtils.equals(ProductTypeEnum.SETMEAL_UPPRICE_PRODUCT.getCode(), orderItem.getProductType())) {
......@@ -755,16 +751,14 @@ public class OrderSdkAdapter {
List<OrderItemResp> comboProducts = orderItemList.stream().filter(item -> ObjectUtils.equals(partnerProductId, item.getParentProductId())).collect(Collectors.toList());
comboProducts.forEach(combo -> productBean.getComboProduct().add(getOldOrderProduct(orderSettlementResps, combo)));
}
productList.add(productBean);
}
for (OrderItemResp metarail : materailProductItemList){
// 获取加料商品列表
QueryOrdersResponse.DataBean.OrderBean.ProductBean productBean = productList.stream().filter(item -> item.getProductId().equals(metarail.getParentProductId())).findFirst().get();
List<QueryOrdersResponse.DataBean.OrderBean.ProductBean> meterailProduct = productBean.getMeterailProduct();
if (CollectionUtils.isEmpty(meterailProduct)){
productBean.setMeterailProduct(new ArrayList<>());
if (ObjectUtils.equals(ProductTypeEnum.MATERIAL_PRODUCT.getCode(), orderItem.getProductType())) {
// 获取加料子商品列表
productBean.setMaterialProduct(new ArrayList<>());
String partnerProductId = orderItem.getProductId() + "_" + orderItem.getProductSeq();
List<OrderItemResp> materialProducts = orderItemList.stream().filter(item -> ObjectUtils.equals(partnerProductId, item.getParentProductId())).collect(Collectors.toList());
materialProducts.forEach(material -> productBean.getMaterialProduct().add(getOldOrderProduct(orderSettlementResps, material)));
}
productBean.getMeterailProduct().add(getOldOrderProduct(orderSettlementResps, metarail));
productList.add(productBean);
}
return productList;
}
......@@ -2571,6 +2565,15 @@ public class OrderSdkAdapter {
// 普通商品 订单转换
productRequest.setOpid(index);
originalAmount += updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, productRequest, partnerId, "");
if (ProductTypeEnum.MATERIAL_PRODUCT.getCode().equals(productRequest.getProductType())) {
if (CollectionUtils.isNotEmpty(productRequest.getMaterialProduct())) {
// 父类商品productId=productId+seq
String partnerProductId = productRequest.getProductId() + "_" + index;
productRequest.getMaterialProduct().stream().forEach(
material -> updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, material, partnerId, partnerProductId)
);
}
}
// 如果是套餐商品,需要转换当前商品行子集ComboProduct&GroupProduct(固定商品、可选商品)
if (ObjectUtils.equals(ProductTypeEnum.SETMEAL_PRODUCT.getCode(), productRequest.getProductType()) || ObjectUtils.equals(ProductTypeEnum.SETMEAL_UPPRICE_PRODUCT.getCode(), productRequest.getProductType())) {
// 父类商品productId=productId+seq
......
......@@ -134,6 +134,10 @@ public class CreateOrderProductRequest extends BaseConfig {
*/
private List<CreateOrderProductRequest> comboProduct;
/**
*加料商品
*/
private List<CreateOrderProductRequest> materialProduct;
/**
* 优惠列表
*/
private List<CreateOrderAccountRequest> accounts;
......
......@@ -554,7 +554,7 @@ public class QueryOrdersResponse {
/**
* 套餐子商品
*/
public List<ProductBean> meterailProduct;
public List<ProductBean> materialProduct;
@NoArgsConstructor
@Data
......
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-shoppingcart-sdk</artifactId>
<version>orderClients</version>
<version>1.1.9-SNAPSHOT</version>
<dependencies>
<dependency>
......
......@@ -321,6 +321,8 @@ public class ShoppingCartAdapter {
cartGoods.setWeight(isSkuProduct ? skuProduct.getWeight() : spuProduct.getWeight());
cartGoods.setUnit(isSkuProduct ? skuProduct.getUnit() : spuProduct.getUnit());
cartGoods.setWeightType(CommonsConstant.WEIGHT_PRODUCT.equals(spuProduct.getWeightType()));
cartGoods.setMaterialAmount(0L);
cartGoods.setOriginalMaterialAmount(0L);
// todo 设置加料
this.checkMaterialProduct(cartGoods, spuProduct);
......@@ -337,6 +339,7 @@ public class ShoppingCartAdapter {
* @param spuProduct
*/
private void checkMaterialProduct(CartGoods cartGoods, ProductBeanDTO spuProduct) {
if (CollectionUtils.isEmpty(cartGoods.getProductMaterialList())) return;
//加料信息为空
if (CollectionUtils.isEmpty(spuProduct.getAdditionalGroupList())) return;
......@@ -359,7 +362,7 @@ public class ShoppingCartAdapter {
material.setSpuId(detail.getProductId());
//行单价 \ 行总价
material.setFinalPrice(detail.getProductFinalPrice().longValue());
material.setAmount(detail.getProductFinalPrice().longValue());
material.setAmount(detail.getProductFinalPrice().longValue() * cartGoods.getQty());
//原行单价*数量
material.setOriginalAmount(detail.getProductFinalPrice().longValue() * cartGoods.getQty());
material.setOriginalPrice(detail.getProductFinalPrice().longValue());
......@@ -375,8 +378,8 @@ public class ShoppingCartAdapter {
cartGoods.setMaterialAmount(materialAmount);
//加料行记录原价总价
cartGoods.setOriginalMaterialAmount(originalMaterAmount);
cartGoods.setOriginalAmount(cartGoods.getOriginalAmount() + originalMaterAmount);
cartGoods.setSubName(materialSubName);
//cartGoods.setOriginalAmount(cartGoods.getOriginalAmount() + originalMaterAmount);
//cartGoods.setSubName(StringUtils.strip(materialSubName, "/"));
}
private boolean updateComboxGoodsInfo(CartGoods cartGoods, CartGoods.ComboxGoods comboxGoods, ProductBeanDTO parentProductBean, List<ProductBeanDTO> productBeans, CartGoodsStates cartGoodsStates, List<String> invalidGoodsIdList) {
......
......@@ -20,7 +20,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId>
<version>1.3.9-SNAPSHOT</version>
<version>1.5.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.freemud.sdk.api.assortment</groupId>
......@@ -89,7 +89,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>storecenter-sdk</artifactId>
<version>3.1.1.RELEASE</version>
<version>3.2.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.freemud</groupId>
......
......@@ -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.getMaterailList())) {
cartGoodsDetailDto.getMaterailList().stream().forEach(p -> {
CreateOrderProductRequest orderProductDto = convent2OrderProductByMaterail(cartGoodsDetailDto, p);
products.add(orderProductDto);
});
}
if (CollectionUtils.isNotEmpty(cartGoodsDetailDto.getActivityDiscountsDtos())) {
createOrderProductDto.setAccounts(getAccounts(createOrderProductDto, cartGoodsDetailDto.getActivityDiscountsDtos()));
}
......@@ -258,21 +251,6 @@ public class OrderAdapter {
return createOrderDto;
}
private CreateOrderProductRequest convent2OrderProductByMaterail(ShoppingCartGoodsDto.CartGoodsDetailDto goodsDetail, ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsMaterail materail) {
CreateOrderProductRequest createOrderProductRequest = new CreateOrderProductRequest();
createOrderProductRequest.setParentProductId(goodsDetail.getSpuId());
createOrderProductRequest.setProductId(materail.getMaterailId());
createOrderProductRequest.setProductName(materail.getMaterailName());
createOrderProductRequest.setPrice(materail.getOriginalPrice());
createOrderProductRequest.setSalePrice(materail.getOriginalPrice());
// TODO 优惠数量问题
createOrderProductRequest.setTotalDiscountAmount(materail.getDiscountAmount());
createOrderProductRequest.setNumber(materail.getQty());
// TODO 加料商品类型问题, 默认为2
createOrderProductRequest.setProductType(materail.getType());
return createOrderProductRequest;
}
public CreateFatherSonOrderRequest convertFatherSonOrderRequest(CreateOrderVo createOrderVo, ShoppingCartGoodsDto shoppingCartGoodsDto,
OrderExtendedReq orderExtendedReq,StoreResponse.BizVO storeResponseDto,
String appId) {
......@@ -1673,6 +1651,11 @@ public class OrderAdapter {
productBean.getComboProduct().forEach(product -> setMealProducts.add(convent2ProductVo(product)));
productVo.setSetMealProducts(setMealProducts);
}
if (ObjectUtils.equals(ProductTypeEnum.MATERIAL_PRODUCT.getCode(), productBean.getProductType())) {
List<ProductVo> setMaterialProducts = new ArrayList<>();
productBean.getMaterialProduct().forEach(product -> setMaterialProducts.add(convent2ProductVo(product)));
productVo.setSetMaterialProducts(setMaterialProducts);
}
productVos.add(productVo);
}
productVos.sort(Comparator.comparing(ProductVo::getSequence));
......@@ -1939,6 +1922,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;
}
......
......@@ -36,5 +36,13 @@ public class PurchasePaidRequestDto {
* 用户ID
*/
private String memberId;
/**
* 推广门店Id
*/
private String promoteStoreId;
/**
* 推广门店名称
*/
private String promoteStoreName;
}
......@@ -212,7 +212,7 @@ public class ShoppingCartGoodsDto {
*/
private List<CartGoodsDetailDto> comboProducts;
private List<CartGoodsMaterail> materailList;
private List<CartGoodsDetailDto> materialList;
@Data
public final static class CartGoodsExtra {
......@@ -227,40 +227,6 @@ public class ShoppingCartGoodsDto {
}
@Data
public final static class CartGoodsMaterail {
/**
* 加料Id
*/
private String materailId;
/**
* 加料名称
*/
private String materailName;
/**
* 加料数量
*/
private Integer qty;
/**
* 加料原始价格
*/
private Long originalPrice;
/**
* 加料优惠价格
*/
private Long discountAmount;
/**
* 加料实际价格
*/
private Long actualPrice;
/**
* 商品类型
*/
private Integer type;
}
/**
* 获取extras attributeNames
*/
......
......@@ -102,7 +102,7 @@ public class CreateOrderVo {
private String expectTime;
/**
* 取餐标识 0=我已到店、尽快送出
* 取餐标识 0=我已到店、尽快送出 1预约单
*/
private String takeMealFlag;
/**
......
......@@ -152,4 +152,6 @@ public class ProductVo {
private List<InventedParentActivityVo> InventedParentActivitiesVo;
private List<ProductVo> setMaterialProducts;
}
......@@ -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;
......
......@@ -61,6 +61,8 @@ public enum ResponseResult {
STORE_BIND_MALL_NOT_FOUND("43014", "商城门店存在"),
STORE_DISCONTENT_DELIVERY_CONDITION("43015", "门店起送条件设置错误"),
STORE_DISCONTENT_DELIVERY_CUP("43016", "不满足起送杯数"),
STORE_MAKE_AN_APPOINTMENT_STOP_BUSINESS("43017", "预约失败,请重新下单"),
STORE_MAKE_AN_APPOINTMENT_OPEN_BUSINESS("43018", "门店不支持预约,请重新选择"),
/**
* 购物车状态码
......
package cn.freemud.service.adapter;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import java.util.Objects;
public abstract class AbstractOrderCheck implements OrderCheck {
/**
* 校验门店状态
* @param bizVO
*/
void doStoreStateCheck(StoreResponse.BizVO bizVO) {
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if (!Objects.equals(bizVO.getState(), "1")) {
throw new ServiceException(ResponseResult.STORE_MAKE_AN_APPOINTMENT_STOP_BUSINESS);
// 营业
} else {
throw new ServiceException(ResponseResult.STORE_MAKE_AN_APPOINTMENT_OPEN_BUSINESS);
}
}
}
package cn.freemud.service.adapter;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.enums.CreateOrderType;
import cn.freemud.interceptor.ServiceException;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
/**
* 订单检查
*/
public interface OrderCheck {
/***
* 是否匹配
* @param orderType {@link CreateOrderType}
* @return
*/
boolean support(int orderType);
/**
* 检查
* @param vo
* @param storeResponse
*/
void check(CreateOrderVo vo, StoreResponse storeResponse) throws ServiceException;
}
package cn.freemud.service.adapter;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Objects;
/**
* 订单校验
*/
@Slf4j
public class OrderCheckAdapter {
static ArrayList<OrderCheck> orderCheckList = Lists.newArrayList(new ToStoreCheck(), new TakeOutOrderCheck());
/***
* 校验预约单门店数据
* @param vo
* @param storeResponse
* @throws ServiceException 抛出异常校验异常数据
*/
public static void check(CreateOrderVo vo, StoreResponse storeResponse) throws ServiceException {
//非预约单的过滤
if (Objects.isNull(vo.getOrderType()) ||
(!Objects.equals(vo.getTakeMealFlag(), "1"))) {
return;
}
StoreResponse.Configuration configuration = storeResponse.getBizVO().getStoreConfig();
log.info("门店:{},外卖预约单状态:{},自提预约单状态:{}", vo.getShopId(), configuration.getDeliveryAppoint(), configuration.getSelfMentionSwitch());
for (OrderCheck orderCheck : orderCheckList) {
if (orderCheck.support(vo.getOrderType())) {
orderCheck.check(vo, storeResponse);
return;
}
}
}
}
package cn.freemud.service.adapter;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.enums.CreateOrderType;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import java.util.Objects;
/**
* 外卖订单检查
*/
public class TakeOutOrderCheck extends AbstractOrderCheck {
@Override
public boolean support(int orderType) {
return CreateOrderType.TAKE_OUT.getCode() == orderType;
}
@Override
public void check(CreateOrderVo vo, StoreResponse storeResponse) {
StoreResponse.BizVO bizVO = storeResponse.getBizVO();
StoreResponse.Configuration storeConfig = bizVO.getStoreConfig();
// 关闭预约单
if (Objects.equals(storeConfig.getDeliveryAppoint(), 0)) {
super.doStoreStateCheck(bizVO);
}
}
}
package cn.freemud.service.adapter;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.enums.CreateOrderType;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import java.util.Objects;
/**
* 到店订单检查
*/
public class ToStoreCheck extends AbstractOrderCheck {
@Override
public boolean support(int orderType) {
return CreateOrderType.COLLECT_GOODS.getCode() == orderType;
}
@Override
public void check(CreateOrderVo vo, StoreResponse storeResponse) {
StoreResponse.BizVO bizVO = storeResponse.getBizVO();
StoreResponse.Configuration storeConfig = bizVO.getStoreConfig();
// 关闭预约单
if (Objects.equals(storeConfig.getSelfMentionSwitch(), 0)) {
super.doStoreStateCheck(bizVO);
}
}
}
......@@ -31,6 +31,7 @@ import cn.freemud.manager.OpenPlatformIappWxappConfigManager;
import cn.freemud.manager.OpenPlatformPartnerStoreDeliveryConfigManager;
import cn.freemud.manager.StoreTableNumberManager;
import cn.freemud.service.CouponService;
import cn.freemud.service.adapter.OrderCheckAdapter;
import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.service.thirdparty.StockClient;
import cn.freemud.utils.LogUtil;
......@@ -109,6 +110,7 @@ public class CheckOrder {
@Autowired
private CouponService couponService;
private static Gson gson = new Gson();
/**
* 下单会员相关校验
*/
......@@ -159,6 +161,9 @@ public class CheckOrder {
if (storeResponse == null || storeResponse.getBizVO() == null) {
throw new ServiceException(ResponseResult.STORE_NOT_FOUND);
}
//订单预约单检查
OrderCheckAdapter.check(createOrderVo, storeResponse);
StoreResponse.BizVO storeResponseDto = storeResponse.getBizVO();
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if (storeResponseDto.getActiveFlag() == null || storeResponseDto.getActiveFlag() != 1) {
......
......@@ -486,7 +486,7 @@ public class OrderServiceImpl implements Orderservice {
// 开通会员卡
if (StringUtils.isNotBlank(ruleId)) {
this.activateMemberCard(partnerId, ruleId, oid, userId);
this.activateMemberCard(partnerId, ruleId, oid, userId, storeId, orderBean.getShopName());
}
//支付回掉成功标记
redisCache.save(RedisKeyConstant.KGD_PAYMENT_CALLBACK_FMID + message.getOut_trade_no(), message.getOut_trade_no(), 10L, TimeUnit.MINUTES);
......@@ -515,19 +515,22 @@ public class OrderServiceImpl implements Orderservice {
/**
* 开通会员卡
*
* @param partnerId 商户号
* @param ruleId 会员规则ID
* @param oid 订单号
* @param userId 用户ID
* @param storeId 门店id
* @param shopName 门店名称
*/
private void activateMemberCard(String partnerId, String ruleId, String oid, String userId) {
private void activateMemberCard(String partnerId, String ruleId, String oid, String userId, String storeId, String shopName) {
PurchasePaidRequestDto purchasePaidRequestDto = new PurchasePaidRequestDto();
purchasePaidRequestDto.setPartnerId(partnerId);
purchasePaidRequestDto.setOperatorType(0);
purchasePaidRequestDto.setRuleId(ruleId);
purchasePaidRequestDto.setOrderId(oid);
purchasePaidRequestDto.setMemberId(userId);
purchasePaidRequestDto.setPromoteStoreId(storeId);
purchasePaidRequestDto.setPromoteStoreName(shopName);
// 尝试三次开通会员卡,中途成功则跳出
int count = 3;
for (int i = 1; i <= count; i++) {
......@@ -1210,7 +1213,6 @@ public class OrderServiceImpl implements Orderservice {
if (OldOrderStatus.COMPLETE.getCode().equals(orderBean.getStatus())) {
cancelOrderRequest.setAfterSalesType(AfterSalesType.USER_SALE_RETURN);
}
cancelOrderRequest.setReason(orderRefundVo.getReason());
cancelOrderRequest.setReqRemark(orderRefundVo.getRemarks());
cancelOrderRequest.setOperator(orderBean.getUserName());
......@@ -1225,7 +1227,7 @@ public class OrderServiceImpl implements Orderservice {
sendPosMessage(partnerId, orderBean.getShopId());
}
//通知小助手发送申请退款公众号订阅消息
sendApplyRefundSubscriptionNotice(orderBean,orderRefundVo);
sendApplyRefundSubscriptionNotice(orderBean, orderRefundVo);
//已接单可发起退款申请,查询门店有无云打印机,有则打印退款申请小票
printApplyRefundSmallTicket(orderBean, orderRefundVo);
}
......
......@@ -15,14 +15,15 @@ public enum ProductTypeEnum {
GENERAL_PRODUCT(1,"普通商品"),
MATERAIL_PRODUCT(2,"加料商品"),
GROUP_PRODUCT(3,"组合商品"),
SETMEAL_PRODUCT(6,"套餐商品"),
SETMEAL_UPPRICE_PRODUCT(7,"加价套餐商品"),
VIRTUAL_PRODUCT(9,"虚拟商品"),
MORD_SPECIFICATION_PRODUCT(10,"多规格商品"),
WEIGHT_PRODUCT(11,"称重商品"),
TABLEWARE_PRODUCT(12,"餐具商品");
TABLEWARE_PRODUCT(12,"餐具商品"),
MATERIAL_PRODUCT(88,"加料商品");
......
......@@ -144,7 +144,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId>
<version>1.3.9-SNAPSHOT</version>
<version>1.5.2.RELEASE</version>
</dependency>
<!-- mybatis -->
......
......@@ -35,7 +35,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>productcenter-sdk</artifactId>
<version>3.2.RELEASE</version>
<version>3.5.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......@@ -45,7 +45,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-shoppingcart-sdk</artifactId>
<version>1.1.8-SNAPSHOT</version>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -121,6 +121,7 @@ public class ShoppingCartConvertAdapter {
goods.setOriginalPrice(materialGoods.getOriginalPrice());
goods.setSalePrice(materialGoods.getFinalPrice());
goods.setQty(cartGoods.getQty());
goods.setTotalDiscountAmount(0);
materialList.add(goods);
}
cartGoodsDetailDto.setMaterialList(materialList);
......@@ -133,7 +134,8 @@ public class ShoppingCartConvertAdapter {
|| ObjectUtils.equals(ActivityTypeEnum.TYPE_62.getCode(), cartGoods.getActivityType())) {
cartGoodsDetailDto.setTotalDiscountAmount(cartGoods.getOriginalAmount().intValue() - cartGoods.getAmount().intValue());
} else {
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods> collect = apportionGoodsList.stream().filter(a -> ObjectUtils.equals(cartGoods.getSkuId(), a.getGoodsId()) || ObjectUtils.equals(cartGoods.getSpuId(), a.getGoodsId())).collect(Collectors.toList());
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods> collect = apportionGoodsList.stream().filter(a -> ObjectUtils.equals(cartGoods.getCartGoodsUid(), a.getCartGoodsUid())).collect(Collectors.toList());
//List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods> collect = apportionGoodsList.stream().filter(a -> ObjectUtils.equals(cartGoods.getSkuId(), a.getGoodsId()) || ObjectUtils.equals(cartGoods.getSpuId(), a.getGoodsId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) {
setTotalDiscountAndSalePrice(collect, cartGoodsDetailDto, duplicateGoodsMap);
// 设置商品行,优惠活动均摊
......@@ -171,6 +173,7 @@ public class ShoppingCartConvertAdapter {
}
/**
* 活动级别的促销均摊
* 获取当前商品的售后价格
*
* @param apportionGoodsList 促销均摊列表
......@@ -186,19 +189,19 @@ public class ShoppingCartConvertAdapter {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGoods : apportionGoodsList) {
//折扣=所有折扣和*百分比(当前行商品数量/购物车总商品数量)
discountPrice += apportionGoods.getApportionDetails().stream().filter(d -> ObjectUtils.notEqual(ActivityTypeEnum.TYPE_32.getCode(), d.getActivityType())
&& ObjectUtils.notEqual(ActivityTypeEnum.TYPE_104.getCode(), d.getActivityType())
&& ObjectUtils.notEqual(ActivityTypeEnum.TYPE_2.getCode(), d.getActivityType())
&& ObjectUtils.notEqual(ActivityTypeEnum.TYPE_21.getCode(), d.getActivityType())
&& ObjectUtils.notEqual(ActivityTypeEnum.TYPE_104.getCode(), d.getActivityType()) //X件Y折
&& ObjectUtils.notEqual(ActivityTypeEnum.TYPE_2.getCode(), d.getActivityType()) //单品特价
&& ObjectUtils.notEqual(ActivityTypeEnum.TYPE_21.getCode(), d.getActivityType())//单品折扣
).mapToLong(t -> t.getActivityApportionAmount() * apportionGoods.getGoodsQuantity()).sum() * cartGoodsDetailDto.getQty() / goodsTotalQty;
}
String currentGoodsIdMap = duplicateGoodsMap.get(cartGoodsDetailDto.getSkuId());
String currentGoodsIdMap = duplicateGoodsMap.get(cartGoodsDetailDto.getCartGoodsUid());
if (currentGoodsIdMap != null) {
String[] value = currentGoodsIdMap.split(",");
//不是最后一行商品,折扣为discountPrice
if (Integer.parseInt(value[0]) > 1) {
int totalDiscountPrice = Integer.parseInt(value[1]) + discountPrice.intValue();
int index = Integer.parseInt(value[0]) - 1;
duplicateGoodsMap.put(cartGoodsDetailDto.getSkuId(), String.format("%s,%s", index, totalDiscountPrice));
duplicateGoodsMap.put(cartGoodsDetailDto.getCartGoodsUid(), String.format("%s,%s", index, totalDiscountPrice));
} else {
//最后一行
Long totalDiscountAmount = 0L;
......@@ -442,4 +445,9 @@ public class ShoppingCartConvertAdapter {
String skuId = StringUtils.isNotBlank(addShoppingCartGoodsRequestVo.getSkuId()) ? addShoppingCartGoodsRequestVo.getSkuId() : "";
addShoppingCartGoodsRequestVo.setSkuId(skuId);
}
}
public String jointPk(String a, String b) {
StringBuffer stringBuffer = new StringBuffer();
return stringBuffer.append(a).append(b).toString();
}
}
\ No newline at end of file
......@@ -122,6 +122,7 @@ public class ActivityCalculationDiscountRequestDto {
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);
}
......
......@@ -173,7 +173,7 @@ public class CartGoods {
private List<ComboxGoods> productGroupList;
/**
* 商品加料
* 商品原始加料数据
*/
private List<MaterialGoods> productMaterialList;
......@@ -314,7 +314,9 @@ public class CartGoods {
originalString.append(goods.toString());
}
}
if (CollectionUtils.isNotEmpty(productMaterialList)) {
productMaterialList.stream().sorted(Comparator.comparing(MaterialGoods::getSpuId)).forEach(e -> originalString.append(e.getSpuId()));
}
//当前字符串
CartGoods cartGoods = (CartGoods) o;
......@@ -333,6 +335,9 @@ public class CartGoods {
currentString.append(goods.toString());
}
}
if (CollectionUtils.isNotEmpty(cartGoods.getProductMaterialList())) {
cartGoods.getProductMaterialList().stream().sorted(Comparator.comparing(MaterialGoods::getSpuId)).forEach(e -> currentString.append(e.getSpuId()));
}
return StringUtils.equals(originalString.toString(), currentString.toString());
}
......
......@@ -59,10 +59,6 @@ public class BuySendPromotionService implements IPromotionService {
if (CollectionUtils.isEmpty(sendActivityList)) {
return;
}
//ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity sendActivity = getSendActivity(sendActivityList, ActivityTypeEnum.TYPE_61);
//if (sendActivity == null) {
// return;
//}
//Todo 获取多个赠品list
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity> sendActivityLists = getSendActivityList(ActivityTypeEnum.TYPE_61, sendActivityList);
......@@ -70,14 +66,6 @@ public class BuySendPromotionService implements IPromotionService {
if (sendActivityLists.size() == 0) {
return;
}
//List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods> sendGoodsList = sendActivity.getSendGoods();
//if (CollectionUtils.isEmpty(sendGoodsList)) {
// return;
//}
//Integer maxNum = sendActivity.getMaxNum();
//List<String> activitySpuIds = sendGoodsList.stream().map(each -> each.getCategory()).collect(Collectors.toList());
//Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods> sendGoodsMap = getSendGoodsMap(sendGoodsList);
//Todo
List<String> activitySpuIds = new ArrayList<>();
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods> sendGoodsMap = new HashMap<>();
......@@ -130,11 +118,6 @@ public class BuySendPromotionService implements IPromotionService {
}
*/
for (CartGoods cartGoods : newCartGoodsList) {
//Integer max = maxNums.get(cartGoods.getGoodsId());
////if (max <= 0) continue;
//if (max < cartGoods.getQty()) {
// cartGoods.setQty(max);
//}
givePackAmount = givePackAmount + cartGoods.getPackPrice() * cartGoods.getQty();
giveTotalAmount = giveTotalAmount + cartGoods.getOriginalPrice() * cartGoods.getQty();
cartGoods.setOriginalAmount(cartGoods.getOriginalPrice() * cartGoods.getQty());
......@@ -265,11 +248,15 @@ public class BuySendPromotionService implements IPromotionService {
}
}
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods sendGoods = sendGoodsMap.get(cartGood.getGoodsId());
CartGoods cartGoods = shoppingCartConvertAdapter.convent2CartGoods(cartGood, sendGoods.getNowPrice());
cartGoods.setClassificationId(cartGood.getClassificationId());
cartGoods.setClassificationName(cartGood.getClassificationName());
cartGoods.setQty(sendGoods.getSendNumber() > 0 ? sendGoods.getSendNumber() : SEND_NUMBER);
newCartGoodsList.add(cartGoods);
String s = currentSubName(cartGood);
CartGoods newCartGoods = shoppingCartConvertAdapter.convent2CartGoods(cartGood, sendGoods.getNowPrice());
newCartGoods.setClassificationId(cartGood.getClassificationId());
newCartGoods.setClassificationName(cartGood.getClassificationName());
newCartGoods.setQty(sendGoods.getSendNumber() > 0 ? sendGoods.getSendNumber() : SEND_NUMBER);
//赠品不允许有加料
newCartGoods.setProductMaterialList(new ArrayList());
newCartGoods.setSubName(s);
newCartGoodsList.add(newCartGoods);
}
......@@ -287,7 +274,7 @@ public class BuySendPromotionService implements IPromotionService {
throw new ServiceException(ResponseResult.SHOPPING_CART_GIFTS_PRODUCT_NOT_EXIST);
}
for (CartGoods cartGoods :newCartGoodsList) {
for (CartGoods cartGoods : newCartGoodsList) {
Optional<ProductBeanDTO> productBeanDTO = productBeanList.stream().filter(productBean -> ObjectUtils.equals(productBean.getPid(), cartGoods.getGoodsId())).findFirst();
if (!productBeanDTO.isPresent()) {
continue;
......@@ -296,4 +283,21 @@ public class BuySendPromotionService implements IPromotionService {
cartGoods.setWeight(productBeanDTO.get().getWeight());
}
}
/**
* 提取当前属性名
*
* @param cartGoods
* @return
*/
private String currentSubName(CartGoods cartGoods) {
String subName = cartGoods.getSubName();
if (CollectionUtils.isEmpty(cartGoods.getProductMaterialList())) {
return subName;
}
StringBuilder currentString = new StringBuilder();
cartGoods.getProductMaterialList().stream().forEach(e -> currentString.append("/" + e.getSpuName()));
String replace = StringUtils.replace(subName, currentString.toString(), "");
return replace;
}
}
......@@ -86,7 +86,7 @@ public class DefaultPromotionService implements IPromotionService {
calculationDiscountResult == null ? new ArrayList<>() : calculationDiscountResult.getApportionGoods();
Map<String, String> duplicateGoodsMap = new HashMap<>();
cartGoodsList.stream().collect(Collectors.groupingBy(CartGoods::getGoodsId, Collectors.counting())).forEach((goodsId, count) -> {
cartGoodsList.stream().collect(Collectors.groupingBy(CartGoods::getCartGoodsUid, Collectors.counting())).forEach((goodsId, count) -> {
duplicateGoodsMap.put(goodsId,String.format("%s,0", count));
});
for (int i = 0, len = cartGoodsList.size(); i < len; i++) {
......
package cn.freemud.service.impl;
import cn.freemud.adapter.ShoppingCartConvertAdapter;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
......@@ -10,6 +11,7 @@ import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.service.IPromotionService;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
......@@ -28,7 +30,8 @@ import java.util.List;
*/
@Service("MaterialPromotionService")
public class MaterialPromotionService implements IPromotionService {
@Autowired
private ShoppingCartConvertAdapter shoppingCartConvertAdapter;
/**
* 总优惠和总原价促进已经计算过了,这里只需要累积行记录
* 加料优惠金额
......@@ -43,31 +46,22 @@ 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, MaterialApportion> map = getApportionGoodsDetail(calculationDiscountResult);
if (map != null && !map.isEmpty()) {
for (CartGoods cartGoods : cartGoodsList) {
if (CollectionUtils.isEmpty(cartGoods.getProductMaterialList())) continue;
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
MaterialApportion apportion = map.get(materialGoods.getSpuId());
//设置小料行单价和行总价
materialGoods.setFinalPrice(apportion.getSalePrice());
materialGoods.setAmount(apportion.getAmount());
}
}
}
long materialAmount = 0L, materialOriginal = 0L;
long materialAmount = 0L, materialOriginal = 0L;
//todo : 加料和商品成交价不需要累计 分开显示
for (CartGoods cartGoods : cartGoodsList) {
if (CollectionUtils.isEmpty(cartGoods.getProductMaterialList())) continue;
materialAmount = 0L;
materialOriginal = 0L;
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
materialAmount += materialGoods.getAmount();
materialOriginal += materialGoods.getOriginalPrice() * cartGoods.getQty();
//materialAmount += materialGoods.getFinalPrice()*cartGoods.getQty();
//materialOriginal += materialGoods.getOriginalPrice() * cartGoods.getQty();
materialGoods.setAmount(materialGoods.getFinalPrice() * cartGoods.getQty());
materialGoods.setOriginalAmount(materialGoods.getOriginalPrice() * cartGoods.getQty());
}
//设置商品行现总价\行原价 商品总价+小料商品总价
cartGoods.setAmount(cartGoods.getAmount() + materialAmount);
cartGoods.setOriginalAmount(cartGoods.getOriginalAmount() + materialOriginal);
//cartGoods.setAmount(cartGoods.getAmount() + materialAmount);
//cartGoods.setOriginalAmount(cartGoods.getOriginalAmount() + materialOriginal);
}
}
......@@ -83,26 +77,29 @@ public class MaterialPromotionService implements IPromotionService {
@Override
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
HashMap<String, MaterialApportion> map = getApportionGoodsDetail(calculationDiscountResult);
if (map == null && map.isEmpty()) return;
List<ShoppingCartGoodsDto.CartGoodsDetailDto> products = shoppingCartGoodsDto.getProducts();
for (ShoppingCartGoodsDto.CartGoodsDetailDto product : products) {
if (CollectionUtils.isEmpty(product.getMaterialList())) continue;
for (ShoppingCartGoodsDto.CartGoodsDetailDto.MaterialGoods materialGoods : product.getMaterialList()) {
MaterialApportion material = map.get(materialGoods.getSpuId());
if (material.getApportionAmount().intValue() == 0) continue;
//设置行记录参加的活动及总优惠
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
List<ActivityDiscountsDto> activityDiscountsDtoList = new ArrayList<>();
activityDiscountsDto.setActivityCode(material.getDetails().activityCode);
activityDiscountsDto.setActivityName(material.getDetails().activityName);
activityDiscountsDto.setActivityType(material.getDetails().activityType);
activityDiscountsDto.setDiscountAmount(material.getApportionAmount());
activityDiscountsDtoList.add(activityDiscountsDto);
if (map.size() > 0) {
String pk = "";
for (ShoppingCartGoodsDto.CartGoodsDetailDto product : products) {
if (CollectionUtils.isEmpty(product.getMaterialList())) continue;
for (ShoppingCartGoodsDto.CartGoodsDetailDto.MaterialGoods materialGoods : product.getMaterialList()) {
pk = shoppingCartConvertAdapter.jointPk(product.getCartGoodsUid(), materialGoods.getSpuId());
MaterialApportion material = map.get(pk);
if (material != null && material.getApportionAmount().intValue() == 0) continue;
//设置行记录参加的活动及总优惠
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
List<ActivityDiscountsDto> activityDiscountsDtoList = new ArrayList<>();
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);
materialGoods.setTotalDiscountAmount((materialGoods.getOriginalPrice().intValue() - materialGoods.getSalePrice().intValue()) * product.getQty());
product.setProductType(GoodsTypeEnum.MATERIAL.getGoodsType());
materialGoods.setActivityDiscountsDtos(activityDiscountsDtoList);
//materialGoods.setTotalDiscountAmount((materialGoods.getOriginalPrice().intValue() - materialGoods.getSalePrice().intValue()) * product.getQty());
materialGoods.setTotalDiscountAmount(material.getTotalDiscountAmount());
product.setProductType(GoodsTypeEnum.MATERIAL.getGoodsType());
}
}
}
//将小料的价格累加到商品行上
......@@ -112,6 +109,7 @@ public class MaterialPromotionService implements IPromotionService {
product.setSalePrice(product.getSalePrice() + materialGoods.getSalePrice());//现金
product.setOriginalPrice(product.getOriginalPrice() + materialGoods.getOriginalPrice());
product.setTotalDiscountAmount(product.getTotalDiscountAmount() + materialGoods.getTotalDiscountAmount());
product.setProductType(GoodsTypeEnum.MATERIAL.getGoodsType());
}
}
}
......@@ -123,45 +121,42 @@ public class MaterialPromotionService implements IPromotionService {
* @return
*/
private HashMap<String, MaterialApportion> getApportionGoodsDetail(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult) {
HashMap<String, MaterialApportion> mApportion = new HashMap<>();
// 遍历促销
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;
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.Material material : apportionGood.getSmallMaterial()) {
hashMap.put(material.getGoodsId(), material);
}
return mApportion;
}
return hashMap;
*/
HashMap<String, MaterialApportion> mApportion = new HashMap<>();
String pk = "";
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) {
if (material.getApportionAmount() == 0) continue;
pk = shoppingCartConvertAdapter.jointPk(material.getCartGoodsUid(), material.getGoodsId());
if (mApportion.get(pk) == 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());
materialApportion.setTotalDiscountAmount(material.getApportionAmount()*material.getGoodsQuantity());
materialApportion.setPk(pk);
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);
if (CollectionUtils.isNotEmpty(material.getApportionDetails())) {
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(pk, 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);
apportion.setTotalDiscountAmount(apportion.getTotalDiscountAmount()+material.getApportionAmount()*material.getGoodsQuantity());
mApportion.put(pk, apportion);
}
}
return mApportion;
......@@ -169,12 +164,14 @@ public class MaterialPromotionService implements IPromotionService {
@Data
private class MaterialApportion {
// 累计
private String goodsId;
private Long salePrice;
private Long amount;
private Integer apportionAmount;
//优惠金额
private Integer totalDiscountAmount;
private ApportionDetails details;
private String pk;
}
@Data
......
......@@ -35,6 +35,7 @@ import cn.freemud.service.thirdparty.*;
import cn.freemud.utils.PromotionFactory;
import cn.freemud.utils.PropertyConvertUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerStoreDeliveryConfig;
......@@ -789,6 +790,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
activityCalculationDiscountRequestDto.setIsMember(isMember);
ActivityCalculationDiscountResponseDto activityCalculationDiscountResponseDto;
try {
System.out.println("start discount");
System.out.println(JSON.toJSONString(activityCalculationDiscountRequestDto));
activityCalculationDiscountResponseDto = activityClient.calculationDiscount(activityCalculationDiscountRequestDto);
} catch (Exception ex) {
ErrorLog.printErrorLog("calculation_discount_error", "/calculation/discount", activityCalculationDiscountRequestDto, ex);
......
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