Commit 20fb0abd by 王世昌

Merge branch 'feature/20210527-购物车重构V2-王世昌' into qa

# Conflicts:
#	shopping-cart-application-service/src/main/java/cn/freemud/demo/entities/bo/goods/list/ListCartGoodsBO.java
#	shopping-cart-application-service/src/main/java/cn/freemud/demo/service/impl/PlatformAddGoodsService.java
#	shopping-cart-application-service/src/main/java/cn/freemud/demo/service/impl/PlatformApportionService.java
#	shopping-cart-application-service/src/main/java/cn/freemud/demo/service/impl/PlatformListCartGoodsService.java
parents 8e3b6af3 d13c7f16
...@@ -573,6 +573,7 @@ public class CouponAdapter { ...@@ -573,6 +573,7 @@ public class CouponAdapter {
couponPromotionVO.setCouponCode(baseRequestDTO.getCouponCode()); couponPromotionVO.setCouponCode(baseRequestDTO.getCouponCode());
couponPromotionVO.setOrderType(baseRequestDTO.getOrderType()); couponPromotionVO.setOrderType(baseRequestDTO.getOrderType());
couponPromotionVO.setFlg(baseRequestDTO.getFlag()); couponPromotionVO.setFlg(baseRequestDTO.getFlag());
couponPromotionVO.setUnChooseCouponCode(baseRequestDTO.getUnChooseCouponCode());
return couponPromotionVO; return couponPromotionVO;
} }
......
...@@ -3,6 +3,7 @@ package cn.freemud.demo.adapter.manager; ...@@ -3,6 +3,7 @@ package cn.freemud.demo.adapter.manager;
import cn.freemud.demo.entities.bo.product.ProductStockBO; import cn.freemud.demo.entities.bo.product.ProductStockBO;
import cn.freemud.demo.entities.bo.goods.ValiadShopProductBO; import cn.freemud.demo.entities.bo.goods.ValiadShopProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO; import cn.freemud.demo.entities.bo.goods.ProductBO;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.GetProductStockResponseDto; import cn.freemud.entities.dto.GetProductStockResponseDto;
import cn.freemud.utils.BeanUtil; import cn.freemud.utils.BeanUtil;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO; import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
...@@ -19,7 +20,7 @@ public class ProductDTO2BOAdapter { ...@@ -19,7 +20,7 @@ public class ProductDTO2BOAdapter {
@Resource @Resource
private MapperFacade mapperFacade; private MapperFacade mapperFacade;
public ProductBO convert2ProductBO(ProductBeanDTO productBeanDTO) { public ProductBO convert2ProductBO(GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean productBeanDTO) {
ProductBO productBO = BeanUtil.convertBean(productBeanDTO, ProductBO::new); ProductBO productBO = BeanUtil.convertBean(productBeanDTO, ProductBO::new);
productBO.setGoodsId(productBeanDTO.getPid()); productBO.setGoodsId(productBeanDTO.getPid());
......
...@@ -9,6 +9,7 @@ import cn.freemud.demo.manager.customer.CustomerService; ...@@ -9,6 +9,7 @@ import cn.freemud.demo.manager.customer.CustomerService;
import cn.freemud.demo.manager.product.ProductService; import cn.freemud.demo.manager.product.ProductService;
import cn.freemud.demo.manager.promotion.PromotionService; import cn.freemud.demo.manager.promotion.PromotionService;
import cn.freemud.demo.manager.store.StoreService; import cn.freemud.demo.manager.store.StoreService;
import cn.freemud.demo.utils.CommonUtils;
import cn.freemud.entities.vo.CartGoods; import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ComboxGoodsRequestVo; import cn.freemud.entities.vo.ComboxGoodsRequestVo;
import cn.freemud.entities.vo.MaterialRequestVo; import cn.freemud.entities.vo.MaterialRequestVo;
...@@ -63,6 +64,7 @@ public class AddGoodsBOAdapter { ...@@ -63,6 +64,7 @@ public class AddGoodsBOAdapter {
PlatformAddGoodsBO platformAddGoodsBO = BeanUtil.convertBean(baseRequestDTO, PlatformAddGoodsBO::new); PlatformAddGoodsBO platformAddGoodsBO = BeanUtil.convertBean(baseRequestDTO, PlatformAddGoodsBO::new);
CartGoods platformProductBO = convert2PlatformProductBO(baseRequestDTO); CartGoods platformProductBO = convert2PlatformProductBO(baseRequestDTO);
platformProductBO.setAddCartTime(System.currentTimeMillis());
platformAddGoodsBO.setAddGoods(platformProductBO); platformAddGoodsBO.setAddGoods(platformProductBO);
ManagerServiceBO managerService = ManagerServiceBO.builder() ManagerServiceBO managerService = ManagerServiceBO.builder()
...@@ -108,13 +110,8 @@ public class AddGoodsBOAdapter { ...@@ -108,13 +110,8 @@ public class AddGoodsBOAdapter {
platformProductBO.setGoodsId(goodsId); platformProductBO.setGoodsId(goodsId);
platformProductBO.setQty(qty); platformProductBO.setQty(qty);
Integer goodsType = StringUtils.isEmpty(skuId)||ObjectUtils.equals(spuId,skuId) ? GoodsTypeEnum.SPU_GOODS.getGoodsType() : GoodsTypeEnum.SKU_GOODS.getGoodsType(); Integer goodsType = StringUtils.isEmpty(skuId)||ObjectUtils.equals(spuId,skuId) ? GoodsTypeEnum.SPU_GOODS.getGoodsType() : GoodsTypeEnum.SKU_GOODS.getGoodsType();
if (spuId.startsWith(CommonsConstant.COUPON_PREFIX)) { if (CommonUtils.isProductCoupon(baseRequestDTO.getCouponCode(), spuId)) {
if (StringUtils.isNotBlank(skuId)){ goodsType = GoodsTypeEnum.COUPON_GOODS.getGoodsType();
goodsType = GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType();
} else {
goodsType = GoodsTypeEnum.COUPON_GOODS.getGoodsType();
}
} else if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductComboList()) || CollectionUtils.isNotEmpty(baseRequestDTO.getProductGroupList())) { } else if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductComboList()) || CollectionUtils.isNotEmpty(baseRequestDTO.getProductGroupList())) {
goodsType = GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(); goodsType = GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType();
} }
......
...@@ -6,17 +6,12 @@ import cn.freemud.demo.entities.dto.goods.add.MCoffeeAddGoodsVO; ...@@ -6,17 +6,12 @@ import cn.freemud.demo.entities.dto.goods.add.MCoffeeAddGoodsVO;
import cn.freemud.demo.entities.dto.goods.add.PlatformAddGoodsVO; import cn.freemud.demo.entities.dto.goods.add.PlatformAddGoodsVO;
import cn.freemud.demo.enums.BizTypeEnum; import cn.freemud.demo.enums.BizTypeEnum;
import cn.freemud.utils.BeanUtil; import cn.freemud.utils.BeanUtil;
import ma.glasnost.orika.MapperFacade;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component @Component
public class AddGoodsVOAdapter { public class AddGoodsVOAdapter {
@Resource
private MapperFacade mapperFacade;
public BaseAddGoodsVO convert2AddGoodsVO(String bizType, ShoppingCartGoodsBO baseAddGoodsBO) { public BaseAddGoodsVO convert2AddGoodsVO(String bizType, ShoppingCartGoodsBO baseAddGoodsBO) {
BaseAddGoodsVO baseAddGoodsVO; BaseAddGoodsVO baseAddGoodsVO;
if (BizTypeEnum.MCOFFEE.getCode().equals(bizType)) { if (BizTypeEnum.MCOFFEE.getCode().equals(bizType)) {
......
package cn.freemud.demo.adapter.service;
import cn.freemud.demo.entities.bo.CheckAdapterBO;
import cn.freemud.demo.entities.bo.goods.AddGoodsToShoppingCartBO;
import cn.freemud.demo.entities.bo.goods.CheckBussinessRulesBO;
import cn.freemud.demo.utils.CommonUtils;
import cn.freemud.entities.dto.CheckSpqInfoRequestDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.GetMemberCouponListRequestDto;
import cn.freemud.entities.dto.GetMemberCouponListResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.enums.CouponStatus;
import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CouponService;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@Component
public class CheckAdapter {
@Autowired
private CouponService couponService;
public void adapter(CheckBussinessRulesBO checkBussinessRulesBO, AddGoodsToShoppingCartBO addGoodsToShoppingCartBO, CheckAdapterBO bo) {
// 校验后有效的商品券map
List<CartGoods> cartGoodsList = addGoodsToShoppingCartBO.getCartGoods();
HashMap<String, CheckSpqInfoResponseDto> validCouponMap = new HashMap<>(16);
HashMap<String, List<String>> spqIdToCartUuid = new HashMap<>(16);
// 校验后有效的商品券map
GetMemberCouponListRequestDto getMemberCouponListRequestDto = new GetMemberCouponListRequestDto(bo.getPartnerId(), bo.getUserId());
getMemberCouponListRequestDto.setStatusFlags(Arrays.asList(CouponStatus.STATUS_0.getCode(), CouponStatus.STATUS_2.getCode()));
getMemberCouponListRequestDto.setPageNum(1);
getMemberCouponListRequestDto.setPageSize(Integer.MAX_VALUE);
List<GetMemberCouponListResponseDto.Result.MemberCoupon> validMemberCouponList = couponService.getValidMemberCouponList(getMemberCouponListRequestDto, bo.getOrderType());
for (int i = 0; i < cartGoodsList.size(); i++) {
CartGoods cartGoods = cartGoodsList.get(i);
if (!CommonUtils.isProductCoupon(cartGoods.getCouponCode(), cartGoods.getCartGoodsUid())) {
continue;
}
if (CollectionUtils.isEmpty(validMemberCouponList)) {
throw new ServiceException(ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON, ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON.getMessage());
}
String couponCode = CommonUtils.getCouponCode(cartGoods.getCouponCode(), cartGoods.getCartGoodsUid());
GetMemberCouponListResponseDto.Result.MemberCoupon memberCoupon = validMemberCouponList.stream().filter(p -> couponCode.equals(p.getCouponCode())).findFirst().orElse(null);
if (memberCoupon == null) {
throw new ServiceException(ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON, ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON.getMessage());
}
// 优惠券放在coupon字段而不是uuid中
boolean useCoupon = true;
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
useCoupon = false;
}
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(bo.getPartnerId(), bo.getShopId(), couponCode, bo.getMenuType());
CheckSpqInfoResponseDto checkSpqInfo;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
} else {
checkSpqInfo = couponService.checkSpqInfo(checkSpqInfoRequestDto);
}
if (null == checkSpqInfo) {
cartGoodsList.remove(i--);
} else {
cartGoods.setActivityCode(checkSpqInfo.getActiveCode());
cartGoods.setCouponProductPrice(checkSpqInfo.getPrice());
validCouponMap.put(couponCode, checkSpqInfo);
if (useCoupon) {
validCouponMap.put(couponCode + checkSpqInfo.getSkuId(), checkSpqInfo);
}
List<String> uuidList = spqIdToCartUuid.computeIfAbsent(couponCode,k->new ArrayList<>());
uuidList.add(cartGoods.getCartGoodsUid());
}
}
addGoodsToShoppingCartBO.setSpqIdToCartUuidMap(spqIdToCartUuid);
addGoodsToShoppingCartBO.setValidCouponMap(validCouponMap);
}
}
...@@ -14,6 +14,7 @@ package cn.freemud.demo.controller; ...@@ -14,6 +14,7 @@ package cn.freemud.demo.controller;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demo.adapter.service.*; import cn.freemud.demo.adapter.service.*;
import cn.freemud.demo.entities.bo.SendGoods;
import cn.freemud.demo.entities.bo.goods.*; import cn.freemud.demo.entities.bo.goods.*;
import cn.freemud.demo.entities.bo.goods.add.BaseAddGoodsBO; import cn.freemud.demo.entities.bo.goods.add.BaseAddGoodsBO;
import cn.freemud.demo.entities.bo.goods.list.ListCartGoodsBO; import cn.freemud.demo.entities.bo.goods.list.ListCartGoodsBO;
...@@ -177,7 +178,7 @@ public class ShoppingCartDemoController { ...@@ -177,7 +178,7 @@ public class ShoppingCartDemoController {
*/ */
ListCartGoodsRequestDTO baseRequestDTO = mapperFacade.map(request, ListCartGoodsRequestDTO.class); ListCartGoodsRequestDTO baseRequestDTO = mapperFacade.map(request, ListCartGoodsRequestDTO.class);
if (CollectionUtils.isNotEmpty(sendGoods)){ if (CollectionUtils.isNotEmpty(sendGoods)){
List<ListCartGoodsBO.SendGoods> newSendGoods = mapperFacade.mapAsList(sendGoods, ListCartGoodsBO.SendGoods.class); List<SendGoods> newSendGoods = mapperFacade.mapAsList(sendGoods, SendGoods.class);
baseRequestDTO.setSendGoods(newSendGoods); baseRequestDTO.setSendGoods(newSendGoods);
} }
......
package cn.freemud.demo.entities.bo;
import lombok.Data;
/**
* @version: 1.0
* @Description: TODO
* @author: WangShiChang
* @date: 2021/6/7 下午5:59
* @Copyright: www.freemud.cn Inc.
*/
@Data
public class Attribute {
private String attributeId;
private String attributeValue;
}
package cn.freemud.demo.entities.bo;
import lombok.Data;
@Data
public class CheckAdapterBO {
private String partnerId;
private String shopId;
private String menuType;
private String couponCode;
private Integer orderType;
private String userId;
}
package cn.freemud.demo.entities.bo;
import lombok.Data;
@Data
public class CouponCode {
/**
* 优惠券
*/
private String couponCode;
/**
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
package cn.freemud.demo.entities.bo;
import lombok.Data;
@Data
public class DistributeAdapterBO {
private String partnerId;
private String shopId;
private String userId;
/**
* 优惠券号
*/
private String couponCode;
private String appId;
private String menuType;
}
package cn.freemud.demo.entities.bo;
import cn.freemud.demo.entities.bo.goods.DiscountResultBO;
import cn.freemud.demo.entities.bo.goods.ManagerServiceBO;
import cn.freemud.demo.entities.bo.goods.ShoppingCartGoodsApportionBO;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import java.util.List;
@Data
public class GetCalCostBO {
/**
* 收货地址ID、svc卡支付外卖订单必传
*/
private String receiveId;
private String partnerId;
private String shopId;
private String userId;
/**
* 微信appId
*/
@NotEmpty(message = "appId不能为空")
private String appId;
/**
* 下单类型 CreateOrderType 外卖、到店、商城
*/
private Integer orderType;
private ManagerServiceBO managerService;
/**
* 优惠券号
*/
private String couponCode;
/**
* 优惠券code列表
*/
private List<CouponCode> couponCodes;
/**
* 活动号
*/
private String activityCode;
/**
* 加价购商品
*/
private List<SendGoods> sendGoods;
private DiscountResultBO discountResultBO;
}
package cn.freemud.demo.entities.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class SendGoods {
/**
* 商品Id
*/
@NotNull
private String goodsId;
private Long originalPrice;
/**
* 商品数量
*/
@NotNull
private Integer qty;
private String activityCode;
private List<Attribute> attributes;
}
...@@ -18,6 +18,8 @@ public class AddGoodsToShoppingCartBO { ...@@ -18,6 +18,8 @@ public class AddGoodsToShoppingCartBO {
private HashMap<String, CheckSpqInfoResponseDto> validCouponMap; private HashMap<String, CheckSpqInfoResponseDto> validCouponMap;
private HashMap<String, List<String>> spqIdToCartUuidMap;
/** /**
* 前端用来提示的信息 * 前端用来提示的信息
*/ */
......
package cn.freemud.demo.entities.bo.goods; package cn.freemud.demo.entities.bo.goods;
import cn.freemud.entities.dto.BenefitBeanDto;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class BenefitBeanBO { public class BenefitBeanBO implements Comparable<BenefitBeanBO>{
/** /**
* 优惠券名称 * 优惠券名称
...@@ -23,5 +26,90 @@ public class BenefitBeanBO { ...@@ -23,5 +26,90 @@ public class BenefitBeanBO {
private Integer benefitSeq; private Integer benefitSeq;
private Integer benefitType; private Integer benefitType;
private List<BenefitBeanDto.ActivitySendGoodsVO> sendGoodsList;
@Override
public int compareTo(BenefitBeanBO o) {
return this.thresholdAmount.compareTo(o.getThresholdAmount());
}
@Data
public static class ActivitySendGoodsVO {
/**
* 活动号
*/
private String activityCode;
/**
* 商品id
*/
private String goodsId;
/**
* 商品CODE
*/
private String goodsCode;
/**
* 商品名
*/
private String goodsName;
/**
* 原价
*/
private Integer originalPrice;
/**
* 现价
*/
private Integer nowPrice;
/**
* 限制数量
*/
private Integer quantityLimit;
/**
* 赠送数量
*/
private Integer sendNumber;
/**
* 赠品类型 0或null为计件赠品 1为称重赠品
*/
private Integer sendGoodsType;
/**
* 赠品重量 g为单位
*/
private Integer sendGoodsWeight;
/**
* 排序
*/
private Integer serialNumber;
/**
* 商品类型:2、是加料商品,9、是虚拟商品,7、是套餐商品,1、是单品
*/
private Integer productType;
/**
* 商品可兑换的券号
*/
private String sendCouponCode;
/**
* 商品可兑换的券名称
*/
private String sendCouponName;
/**
* 是否兑换券
*/
private boolean sendCoupon=false;
}
} }
...@@ -25,6 +25,7 @@ public class CalCostBO { ...@@ -25,6 +25,7 @@ public class CalCostBO {
private Long deliveryAmount; private Long deliveryAmount;
private HashMap<String, CheckSpqInfoResponseDto> validCouponMap; private HashMap<String, CheckSpqInfoResponseDto> validCouponMap;
private HashMap<String, List<String>> spqIdToCartUuidMap;
private ShoppingCartContext shoppingCartContext; private ShoppingCartContext shoppingCartContext;
......
...@@ -8,6 +8,7 @@ import lombok.Data; ...@@ -8,6 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -88,6 +89,7 @@ public class CalculationDiscountBO { ...@@ -88,6 +89,7 @@ public class CalculationDiscountBO {
* 校验后有效的商品券map * 校验后有效的商品券map
*/ */
private Map<String, CheckSpqInfoResponseDto> validCouponMap; private Map<String, CheckSpqInfoResponseDto> validCouponMap;
private HashMap<String, List<String>> spqIdToCartUuidMap;
/** /**
* 扣减库存 * 扣减库存
*/ */
...@@ -115,6 +117,8 @@ public class CalculationDiscountBO { ...@@ -115,6 +117,8 @@ public class CalculationDiscountBO {
private Long thresholdAmount; private Long thresholdAmount;
private Long totalAmount; private Long totalAmount;
private Long alreadyDiscountAmount; private Long alreadyDiscountAmount;
private List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendGoods> sendGoods;
} }
@Data @Data
......
...@@ -15,6 +15,7 @@ public class DiscountResultBO { ...@@ -15,6 +15,7 @@ public class DiscountResultBO {
private Boolean isMember; private Boolean isMember;
private HashMap<String, CheckSpqInfoResponseDto> validCouponMap; private HashMap<String, CheckSpqInfoResponseDto> validCouponMap;
private HashMap<String, List<String>> spqIdToCartUuidMap;
/** /**
* 前端用来提示的信息 * 前端用来提示的信息
......
package cn.freemud.demo.entities.bo.goods; package cn.freemud.demo.entities.bo.goods;
import cn.freemud.demo.entities.bo.SendGoods;
import cn.freemud.demo.entities.bo.goods.list.ListCartGoodsBO; import cn.freemud.demo.entities.bo.goods.list.ListCartGoodsBO;
import cn.freemud.demo.entities.dto.BaseRequestDTO; import cn.freemud.demo.entities.dto.BaseRequestDTO;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo; import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
...@@ -62,7 +63,7 @@ public class ListCartGoodsRequestDTO extends BaseRequestDTO { ...@@ -62,7 +63,7 @@ public class ListCartGoodsRequestDTO extends BaseRequestDTO {
/** /**
* 加价购商品 * 加价购商品
*/ */
private List<ListCartGoodsBO.SendGoods> sendGoods; private List<SendGoods> sendGoods;
/** /**
* 买一赠一寄件商品 * 买一赠一寄件商品
...@@ -104,6 +105,10 @@ public class ListCartGoodsRequestDTO extends BaseRequestDTO { ...@@ -104,6 +105,10 @@ public class ListCartGoodsRequestDTO extends BaseRequestDTO {
*/ */
private String monthlyCardCode; private String monthlyCardCode;
/**
* 取消选择的商品券
*/
private String unChooseCouponCode;
@Data @Data
public final static class BuyMemberCard { public final static class BuyMemberCard {
......
...@@ -39,6 +39,10 @@ public class ProductBO { ...@@ -39,6 +39,10 @@ public class ProductBO {
* 数量 * 数量
*/ */
private Integer qty; private Integer qty;
/**
* 加料最大限购
*/
private Integer maxNum;
private String category; private String category;
/** /**
* 分类名 * 分类名
......
package cn.freemud.demo.entities.bo.goods; package cn.freemud.demo.entities.bo.goods;
import cn.freemud.demo.entities.bo.CouponCode;
import cn.freemud.demo.entities.bo.SendGoods;
import cn.freemud.entities.vo.CartGoods; import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import lombok.Data; import lombok.Data;
...@@ -62,7 +64,7 @@ public class ShoppingCartGoodsApportionBO { ...@@ -62,7 +64,7 @@ public class ShoppingCartGoodsApportionBO {
/** /**
* 优惠券code列表 * 优惠券code列表
*/ */
private List<couponCode> couponCodes; private List<CouponCode> couponCodes;
/** /**
* 微信appId * 微信appId
...@@ -119,40 +121,6 @@ public class ShoppingCartGoodsApportionBO { ...@@ -119,40 +121,6 @@ public class ShoppingCartGoodsApportionBO {
private PremiumExchangeActivity premiumExchangeActivity; private PremiumExchangeActivity premiumExchangeActivity;
@Data
public final static class couponCode {
/**
* 优惠券
*/
private String couponCode;
/**
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
@Data
public final static class SendGoods {
/**
* 商品Id
*/
@NotNull
private String goodsId;
private Long originalPrice;
/**
* 商品数量
*/
@NotNull
private Integer qty;
private String activityCode;
}
@Data @Data
......
package cn.freemud.demo.entities.bo.goods.list; package cn.freemud.demo.entities.bo.goods.list;
import cn.freemud.demo.entities.bo.CouponCode;
import cn.freemud.demo.entities.bo.SendGoods;
import cn.freemud.demo.entities.bo.goods.BaseBo; import cn.freemud.demo.entities.bo.goods.BaseBo;
import cn.freemud.demo.entities.bo.goods.ManagerServiceBO; import cn.freemud.demo.entities.bo.goods.ManagerServiceBO;
import cn.freemud.entities.vo.CartGoods; import cn.freemud.entities.vo.CartGoods;
...@@ -49,7 +51,7 @@ public class ListCartGoodsBO extends BaseBo { ...@@ -49,7 +51,7 @@ public class ListCartGoodsBO extends BaseBo {
/** /**
* 优惠券code列表 * 优惠券code列表
*/ */
private List<couponCode> couponCodes; private List<CouponCode> couponCodes;
/** /**
* 微信appId * 微信appId
...@@ -99,48 +101,10 @@ public class ListCartGoodsBO extends BaseBo { ...@@ -99,48 +101,10 @@ public class ListCartGoodsBO extends BaseBo {
private String tableNumber; private String tableNumber;
/**
* 取消选择的商品券
*/
private String unChooseCouponCode;
@Data
public final static class couponCode {
/**
* 优惠券
*/
private String couponCode;
/**
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
@Data
public final static class SendGoods {
/**
* 商品Id
*/
@NotNull
private String goodsId;
private Long originalPrice;
/**
* 商品数量
*/
@NotNull
private Integer qty;
private String activityCode;
private List<Attribute> attributes;
}
@Data
public final static class Attribute{
private String attributeId;
private String attributeValue;
}
} }
...@@ -63,6 +63,10 @@ public class ActivityBO { ...@@ -63,6 +63,10 @@ public class ActivityBO {
*/ */
private Integer activityType; private Integer activityType;
/** /**
* 活动子类型 1 阶梯 2 每满
*/
private Integer activitySubType;
/**
* 适用于优惠券活动,优惠券类型,0:满减券 1:代金券 * 适用于优惠券活动,优惠券类型,0:满减券 1:代金券
*/ */
private Integer couponType; private Integer couponType;
......
...@@ -121,6 +121,10 @@ public class GetCalculationDiscountBO { ...@@ -121,6 +121,10 @@ public class GetCalculationDiscountBO {
*/ */
private Long originalPrice; private Long originalPrice;
/** /**
* 加车时间
*/
private Long addCartTime;
/**
* 折扣比例 * 折扣比例
* 例如8折为80 * 例如8折为80
*/ */
......
package cn.freemud.demo.manager.coupon; package cn.freemud.demo.manager.coupon;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.JsonUtil;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.demo.entities.bo.goods.ValidateShopProductRequestBO; import cn.freemud.demo.entities.bo.goods.ValidateShopProductRequestBO;
import cn.freemud.demo.entities.bo.coupon.CheckSpqBO; import cn.freemud.demo.entities.bo.coupon.CheckSpqBO;
...@@ -22,6 +24,7 @@ import cn.freemud.interceptor.ServiceException; ...@@ -22,6 +24,7 @@ import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.thirdparty.CardBinClient; import cn.freemud.service.thirdparty.CardBinClient;
import cn.freemud.service.thirdparty.CouponOnlineClient; import cn.freemud.service.thirdparty.CouponOnlineClient;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.RedisUtil; import cn.freemud.utils.RedisUtil;
import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductType; import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductType;
//import com.freemud.card.sdk.comm.Finals; //import com.freemud.card.sdk.comm.Finals;
...@@ -67,7 +70,7 @@ public class KgdCouponServiceImpl implements CouponService { ...@@ -67,7 +70,7 @@ public class KgdCouponServiceImpl implements CouponService {
@Override @Override
public CouponDetailBO getCouponDetail(GetCouponDetailBO getCouponDetailBO) { public CouponDetailBO getCouponDetail(GetCouponDetailBO getCouponDetailBO) {
Map<String, String> map = new TreeMap<String, String>(); Map<String, String> map = new TreeMap<>();
if (StringUtils.isBlank(getCouponDetailBO.getPartnerId()) || StringUtils.isBlank(getCouponDetailBO.getCouponCode())) { if (StringUtils.isBlank(getCouponDetailBO.getPartnerId()) || StringUtils.isBlank(getCouponDetailBO.getCouponCode())) {
return null; return null;
} }
...@@ -99,42 +102,48 @@ public class KgdCouponServiceImpl implements CouponService { ...@@ -99,42 +102,48 @@ public class KgdCouponServiceImpl implements CouponService {
CheckSpqBO result = new CheckSpqBO(); CheckSpqBO result = new CheckSpqBO();
GetCouponDetailBO getCouponDetail = convert2GetCouponDetailBO(getCheckSpqBo); GetCouponDetailBO getCouponDetail = convert2GetCouponDetailBO(getCheckSpqBo);
// 如果是商品券,获取商品券信息 // 如果是商品券/换购券,获取券信息
CouponDetailBO couponDetail = getCouponDetail(getCouponDetail); CouponDetailBO couponDetail = getCouponDetail(getCouponDetail);
LogUtil.info(LogTreadLocal.getTrackingNo(), "KgdCouponServiceImpl.getCouponDetail", JsonUtil.toJSONString(getCouponDetail), JsonUtil.toJSONString(couponDetail));
if (couponDetail == null || !couponDetail.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetail.getDetails())) { if (couponDetail == null || !couponDetail.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetail.getDetails())) {
return null; return null;
} }
if (CollectionUtils.isEmpty(couponDetail.getDetails())) {
return null;
}
Integer couponType = 0; Integer couponType = 0;
CouponDetailBO.Details couponActivityDetail = null; CouponDetailBO.Details couponActivityDetail = null;
// 多规格券
if (StringUtils.isNotBlank(getCheckSpqBo.getSkuId())){ if (StringUtils.isNotBlank(getCheckSpqBo.getSkuId())){
boolean productValid = false;
for (CouponDetailBO.Details detail : couponDetail.getDetails()) { for (CouponDetailBO.Details detail : couponDetail.getDetails()) {
if (productValid) break; if (Objects.nonNull(couponActivityDetail)){
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus())) continue; break;
}
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus()) && !CouponStatus.STATUS_2.getCode().equals(detail.getStatus())){
continue;
}
for (CouponDetailBO.ActiveProduct activeProduct : detail.getActiveProduct()) { for (CouponDetailBO.ActiveProduct activeProduct : detail.getActiveProduct()) {
if (getCheckSpqBo.getSkuId().equals(activeProduct.getProductIdPartner())) { if (getCheckSpqBo.getSkuId().equals(activeProduct.getProductIdPartner())) {
productValid = true;
couponActivityDetail = detail; couponActivityDetail = detail;
// todo 和 CouponServiceImpl.checkSpqInfo不一致
couponType = detail.getType(); couponType = detail.getType();
break; break;
} }
} }
} }
//检查商品是否有效
if (!productValid) {
return null;
}
} else { } else {
couponActivityDetail = couponDetail.getDetails().get(0); // 单规格券
if (Objects.equals(couponDetail.getDetails().get(0).getStatus(), CouponStatus.STATUS_0.getCode())) {
couponActivityDetail = couponDetail.getDetails().get(0);
}
}
if (Objects.isNull(couponActivityDetail)) {
return null;
} }
// 判断该券是否在这个门店下(一个券可以在多个门店下使用) // 判断该券是否在这个门店下(一个券可以在多个门店下使用)
List<String> couPonstoreIds = Lists.newArrayList(); List<String> couPonstoreIds = Lists.newArrayList();
for (CouponDetailBO.Details detail : couponDetail.getDetails()) { for (CouponDetailBO.Details detail : couponDetail.getDetails()) {
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus())) continue; if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus()) && !CouponStatus.STATUS_2.getCode().equals(detail.getStatus())){
continue;
}
for (CouponDetailBO.ActiveRestrictionVOS activeRestrictionVO : detail.getActiveRestrictionVOS()) { for (CouponDetailBO.ActiveRestrictionVOS activeRestrictionVO : detail.getActiveRestrictionVOS()) {
couPonstoreIds.add(activeRestrictionVO.getStoreIdPartner()); couPonstoreIds.add(activeRestrictionVO.getStoreIdPartner());
} }
...@@ -142,17 +151,16 @@ public class KgdCouponServiceImpl implements CouponService { ...@@ -142,17 +151,16 @@ public class KgdCouponServiceImpl implements CouponService {
if (CollectionUtils.isNotEmpty(couPonstoreIds) && !couPonstoreIds.contains(getCheckSpqBo.getStoreId())) { if (CollectionUtils.isNotEmpty(couPonstoreIds) && !couPonstoreIds.contains(getCheckSpqBo.getStoreId())) {
return null; return null;
} }
// 券返回的商品id
//券返回的商品id
List<String> skuIds = Lists.newArrayList();
String skuId = getCheckSpqBo.getSkuId(); String skuId = getCheckSpqBo.getSkuId();
if (StringUtils.isBlank(skuId)){ if(StringUtils.isBlank(skuId)){
skuId = couponDetail.getDetails().get(0).getActiveProduct().get(0).getProductIdPartner(); skuId = couponActivityDetail.getActiveProduct().get(0).getProductIdPartner();
} }
skuIds.add(skuId);
// 通过skuid查询spuid // 通过skuid查询spuid
GetProductBySkuIdBO getProductBySkuIdBO = convert2GetProductBySkuIdBO(getCheckSpqBo); GetProductBySkuIdBO getProductBySkuIdBO = convert2GetProductBySkuIdBO(getCheckSpqBo,skuId);
Map<String, GetProductBySkuIdResponseBO> productsInfoBySkuIds = productManager.getProductsInfoBySkuIds(getProductBySkuIdBO, getCheckSpqBo.getProductService()); Map<String, GetProductBySkuIdResponseBO> productsInfoBySkuIds = productManager.getProductsInfoBySkuIds(getProductBySkuIdBO, getCheckSpqBo.getProductService());
LogUtil.info(LogTreadLocal.getTrackingNo(), "getProductBySkuIdBO >>>>", JsonUtil.toJSONString(getProductBySkuIdBO), JsonUtil.toJSONString(couponDetail));
GetProductBySkuIdResponseBO productsVo = productsInfoBySkuIds.get(skuId); GetProductBySkuIdResponseBO productsVo = productsInfoBySkuIds.get(skuId);
if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) { if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) {
return null; return null;
...@@ -237,13 +245,11 @@ public class KgdCouponServiceImpl implements CouponService { ...@@ -237,13 +245,11 @@ public class KgdCouponServiceImpl implements CouponService {
return getCouponDetailBO; return getCouponDetailBO;
} }
private GetProductBySkuIdBO convert2GetProductBySkuIdBO(GetCheckSpqBo getCheckSpqBo) { private GetProductBySkuIdBO convert2GetProductBySkuIdBO(GetCheckSpqBo getCheckSpqBo,String skuId) {
GetProductBySkuIdBO getProductBySkuIdBO = new GetProductBySkuIdBO(); GetProductBySkuIdBO getProductBySkuIdBO = new GetProductBySkuIdBO();
getProductBySkuIdBO.setMenuType(getCheckSpqBo.getMenuType()); getProductBySkuIdBO.setMenuType(getCheckSpqBo.getMenuType());
getProductBySkuIdBO.setPartnerId(getCheckSpqBo.getPartnerId()); getProductBySkuIdBO.setPartnerId(getCheckSpqBo.getPartnerId());
List<String> skuids = new ArrayList<>(); getProductBySkuIdBO.setSkuids(Collections.singletonList(skuId));
skuids.add(getCheckSpqBo.getSkuId());
getProductBySkuIdBO.setSkuids(skuids);
getProductBySkuIdBO.setStoreId(getCheckSpqBo.getStoreId()); getProductBySkuIdBO.setStoreId(getCheckSpqBo.getStoreId());
return getProductBySkuIdBO; return getProductBySkuIdBO;
} }
......
...@@ -12,10 +12,7 @@ import cn.freemud.demo.entities.bo.product.GetProductBySkuIdBO; ...@@ -12,10 +12,7 @@ import cn.freemud.demo.entities.bo.product.GetProductBySkuIdBO;
import cn.freemud.demo.entities.bo.product.GetProductStock; import cn.freemud.demo.entities.bo.product.GetProductStock;
import cn.freemud.demo.entities.bo.product.GetRequiredProductListBO; import cn.freemud.demo.entities.bo.product.GetRequiredProductListBO;
import cn.freemud.demo.entities.bo.product.ProductStockBO; import cn.freemud.demo.entities.bo.product.ProductStockBO;
import cn.freemud.entities.dto.GetProductStockRequestDto; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import cn.freemud.entities.dto.ProductBaseResponse;
import cn.freemud.entities.dto.RequiredProductRequest;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.ItemService; import cn.freemud.service.ItemService;
...@@ -28,6 +25,7 @@ import com.freemud.application.sdk.api.productcenter.request.product.valid.Valid ...@@ -28,6 +25,7 @@ import com.freemud.application.sdk.api.productcenter.request.product.valid.Valid
import com.freemud.application.sdk.api.productcenter.response.ProductResponseDTO; import com.freemud.application.sdk.api.productcenter.response.ProductResponseDTO;
import com.freemud.application.sdk.api.productcenter.response.valid.ValiadShopProductResponse; import com.freemud.application.sdk.api.productcenter.response.valid.ValiadShopProductResponse;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl; import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -67,11 +65,11 @@ public class KgdProductServiceImpl implements ProductService { ...@@ -67,11 +65,11 @@ public class KgdProductServiceImpl implements ProductService {
public List<ProductBO> getProductInfo(GetProductBO getProductBO) { public List<ProductBO> getProductInfo(GetProductBO getProductBO) {
// 获取添加商品的详细信息 // 获取添加商品的详细信息
List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(getProductBO.getPartnerId(), List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean> productBeanListSpuClass = assortmentSdkService.getProductsInfo(getProductBO.getPartnerId(),
getProductBO.getStoreId(), getProductBO.getGoodsId(), getProductBO.getMenuType(), shoppingCartBaseService); getProductBO.getStoreId(), getProductBO.getGoodsId(), getProductBO.getMenuType(), shoppingCartBaseService);
List<ProductBO> productList = new ArrayList<>(); List<ProductBO> productList = new ArrayList<>();
for (ProductBeanDTO dto : productBeanListSpuClass){ for (GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean dto : productBeanListSpuClass){
ProductBO platformProductBO = productDTO2BOAdapter.convert2ProductBO(dto); ProductBO platformProductBO = productDTO2BOAdapter.convert2ProductBO(dto);
productList.add(platformProductBO); productList.add(platformProductBO);
} }
...@@ -94,14 +92,14 @@ public class KgdProductServiceImpl implements ProductService { ...@@ -94,14 +92,14 @@ public class KgdProductServiceImpl implements ProductService {
GetProductStockRequestDto getProductStockRequestDto = productBO2DTOAdapter.convert2GetProductStockDto(getProductStock); GetProductStockRequestDto getProductStockRequestDto = productBO2DTOAdapter.convert2GetProductStockDto(getProductStock);
GetProductStockResponseDto availableStocks = stockClient.getAvailableStocks(getProductStockRequestDto); GetProductStockResponseDto availableStocks = stockClient.getAvailableStocks(getProductStockRequestDto);
List<GetProductStockResponseDto.DataBean> result = availableStocks.getResult(); if (availableStocks == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(availableStocks.getCode())) {
if (availableStocks != null && !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(availableStocks.getCode())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE); throw new ServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE);
} }
List<ProductStockBO> list = new ArrayList<>(); List<ProductStockBO> list = new ArrayList<>();
for (GetProductStockResponseDto.DataBean dataBean : result){ if (CollectionUtils.isEmpty(availableStocks.getResult())) {
return list;
}
for (GetProductStockResponseDto.DataBean dataBean : availableStocks.getResult()){
ProductStockBO productStockBO = productDTO2BOAdapter.convert2ProductStockBO(dataBean); ProductStockBO productStockBO = productDTO2BOAdapter.convert2ProductStockBO(dataBean);
list.add(productStockBO); list.add(productStockBO);
} }
......
...@@ -14,7 +14,7 @@ public interface DistributeService { ...@@ -14,7 +14,7 @@ public interface DistributeService {
* 初始化价格 * 初始化价格
*/ */
ShoppingGoodsAmountBO initShoppingCart(CalculationDiscountBO.CalculationDiscountResult discountResult ShoppingGoodsAmountBO initShoppingCart(CalculationDiscountBO.CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsList); , List<CartGoods> cartGoodsList, String couponCode);
FullReductionBO fullReduction(BaseBo baseRequestDTO, CalculationDiscountBO.CalculationDiscountResult discountResult, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto); FullReductionBO fullReduction(BaseBo baseRequestDTO, CalculationDiscountBO.CalculationDiscountResult discountResult, List<CartGoods> cartGoodsList, ActivityQueryDto activityQueryDto);
......
...@@ -4,6 +4,7 @@ import cn.freemud.adapter.ActivityAdapter; ...@@ -4,6 +4,7 @@ import cn.freemud.adapter.ActivityAdapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.CustomerScoreConstant; import cn.freemud.constant.CustomerScoreConstant;
import cn.freemud.constant.ShoppingCartConstant; import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.demo.entities.bo.SendGoods;
import cn.freemud.demo.entities.bo.promotion.GetActivityBO; import cn.freemud.demo.entities.bo.promotion.GetActivityBO;
import cn.freemud.demo.constant.ResponseConstant; import cn.freemud.demo.constant.ResponseConstant;
import cn.freemud.demo.entities.bo.goods.ShoppingCartGoodsBO; import cn.freemud.demo.entities.bo.goods.ShoppingCartGoodsBO;
...@@ -24,6 +25,7 @@ import cn.freemud.entities.vo.*; ...@@ -24,6 +25,7 @@ import cn.freemud.entities.vo.*;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.CouponService;
import cn.freemud.service.impl.AssortmentSdkService; import cn.freemud.service.impl.AssortmentSdkService;
import cn.freemud.service.impl.calculate.CalculationCommonService; import cn.freemud.service.impl.calculate.CalculationCommonService;
import cn.freemud.utils.LogUtil; import cn.freemud.utils.LogUtil;
...@@ -86,6 +88,9 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -86,6 +88,9 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
@Autowired @Autowired
private MessageService messageService; private MessageService messageService;
@Autowired
private CouponService couponService;
private static final String limitCartKey = "ecology:kgd:wxappconfig:open_platform_partner_wxapp_config:appkey_"; private static final String limitCartKey = "ecology:kgd:wxappconfig:open_platform_partner_wxapp_config:appkey_";
...@@ -209,6 +214,29 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -209,6 +214,29 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
List<CartGoods> allCartGoodsList = assortmentSdkService.getShoppingCart(baseRequestBO.getPartnerId(), baseRequestBO.getShopId(), userInfo.getUserId(), baseRequestBO.getSessionId(), null, shoppingCartBaseService); List<CartGoods> allCartGoodsList = assortmentSdkService.getShoppingCart(baseRequestBO.getPartnerId(), baseRequestBO.getShopId(), userInfo.getUserId(), baseRequestBO.getSessionId(), null, shoppingCartBaseService);
if (CollectionUtils.isEmpty(allCartGoodsList)) { if (CollectionUtils.isEmpty(allCartGoodsList)) {
allCartGoodsList = new ArrayList<>(); allCartGoodsList = new ArrayList<>();
} else {
// check是否反选取消商品券
if (StringUtils.isNotBlank(baseRequestBO.getUnChooseCouponCode())){
// 遍历该商品券选择的商品,并将商品券替换为普通商品
for (int i = allCartGoodsList.size() - 1; i >= 0; i--){
CartGoods cartGoods = allCartGoodsList.get(i);
if (GoodsTypeEnum.COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType()) || GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())){
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(baseRequestBO.getPartnerId(), baseRequestBO.getShopId(), cartGoods.getSpuId(), baseRequestBO.getMenuType());
GetProductsVo productInfo = null;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
productInfo = couponService.getSpqProductInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
} else {
productInfo = couponService.getSpqProductInfo(checkSpqInfoRequestDto);
}
if (productInfo == null){
allCartGoodsList.remove(i);
} else {
convert2CartGoods(cartGoods, productInfo);
}
}
}
}
} }
bo.setCartGoods(allCartGoodsList); bo.setCartGoods(allCartGoodsList);
...@@ -287,6 +315,8 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -287,6 +315,8 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
calCostBO.setShoppingCartContext(addGoodsToShoppingCartBO.getShoppingCartContext()); calCostBO.setShoppingCartContext(addGoodsToShoppingCartBO.getShoppingCartContext());
calCostBO.setToastMsg(addGoodsToShoppingCartBO.getToastMsg()); calCostBO.setToastMsg(addGoodsToShoppingCartBO.getToastMsg());
calCostBO.setValidCouponMap(addGoodsToShoppingCartBO.getValidCouponMap()); calCostBO.setValidCouponMap(addGoodsToShoppingCartBO.getValidCouponMap());
calCostBO.setSpqIdToCartUuidMap(addGoodsToShoppingCartBO.getSpqIdToCartUuidMap());
calCostBO.setIsMember(addGoodsToShoppingCartBO.getIsMember()); calCostBO.setIsMember(addGoodsToShoppingCartBO.getIsMember());
return calCostBO; return calCostBO;
...@@ -423,6 +453,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -423,6 +453,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
if (CollectionUtils.isNotEmpty(before.getGetCalculationDiscountBO().getGoods())){ if (CollectionUtils.isNotEmpty(before.getGetCalculationDiscountBO().getGoods())){
CalculationDiscountBO calculationDiscountBO = promotionManager.calculationDiscount(before.getGetCalculationDiscountBO(), baseRequestDTO.getManagerService().getPromotionService()); CalculationDiscountBO calculationDiscountBO = promotionManager.calculationDiscount(before.getGetCalculationDiscountBO(), baseRequestDTO.getManagerService().getPromotionService());
calculationDiscountBO.getResult().setValidCouponMap(before.getValidCouponMap()); calculationDiscountBO.getResult().setValidCouponMap(before.getValidCouponMap());
calculationDiscountBO.getResult().setSpqIdToCartUuidMap(before.getSpqIdToCartUuidMap());
before.setCalculationDiscountBO(calculationDiscountBO); before.setCalculationDiscountBO(calculationDiscountBO);
} }
...@@ -438,7 +469,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -438,7 +469,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
ShoppingCartGoodsBO shoppingCartGoodsBO = new ShoppingCartGoodsBO(); ShoppingCartGoodsBO shoppingCartGoodsBO = new ShoppingCartGoodsBO();
ShoppingGoodsAmountBO shoppingGoodsAmountBO = distributeService.initShoppingCart(distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods()); ShoppingGoodsAmountBO shoppingGoodsAmountBO = distributeService.initShoppingCart(distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), baseRequestDTO.getCouponCode());
// 满减 // 满减
FullReductionBO fullReductionBO = distributeService.fullReduction(baseRequestDTO, distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), activityQueryDto); FullReductionBO fullReductionBO = distributeService.fullReduction(baseRequestDTO, distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), activityQueryDto);
...@@ -799,7 +830,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -799,7 +830,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
// goodsId->qty // goodsId->qty
Map<String, Integer> map = baseRequestDTO.getSendGoods() Map<String, Integer> map = baseRequestDTO.getSendGoods()
.stream() .stream()
.collect(Collectors.toMap(ListCartGoodsBO.SendGoods::getGoodsId, ListCartGoodsBO.SendGoods::getQty)); .collect(Collectors.toMap(SendGoods::getGoodsId, SendGoods::getQty));
//goodsId -> originalPrice //goodsId -> originalPrice
Map<String, Long> OriginalPrice = sendGoods.get(0) Map<String, Long> OriginalPrice = sendGoods.get(0)
...@@ -834,15 +865,15 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -834,15 +865,15 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
*/ */
public List<CreateOrderVo.PremiumExchangeActivity.Product> buildPremiumExchangeActivityProduct(ListCartGoodsBO baseRequestDTO) { public List<CreateOrderVo.PremiumExchangeActivity.Product> buildPremiumExchangeActivityProduct(ListCartGoodsBO baseRequestDTO) {
List<ListCartGoodsBO.SendGoods> sendGoods = baseRequestDTO.getSendGoods(); List<SendGoods> sendGoods = baseRequestDTO.getSendGoods();
List<String> goodsIds = sendGoods List<String> goodsIds = sendGoods
.stream() .stream()
.map(ListCartGoodsBO.SendGoods::getGoodsId) .map(SendGoods::getGoodsId)
.collect(Collectors.toList()); .collect(Collectors.toList());
Map<String, ListCartGoodsBO.SendGoods> goodQtyMap = sendGoods Map<String, SendGoods> goodQtyMap = sendGoods
.stream() .stream()
.collect(Collectors.toMap(ListCartGoodsBO.SendGoods::getGoodsId, Function.identity(), (k1, k2) -> k1)); .collect(Collectors.toMap(SendGoods::getGoodsId, Function.identity(), (k1, k2) -> k1));
GetProductBO getProductBO = new GetProductBO(); GetProductBO getProductBO = new GetProductBO();
getProductBO.setMenuType(baseRequestDTO.getMenuType()); getProductBO.setMenuType(baseRequestDTO.getMenuType());
getProductBO.setPartnerId(baseRequestDTO.getPartnerId()); getProductBO.setPartnerId(baseRequestDTO.getPartnerId());
...@@ -865,7 +896,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -865,7 +896,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
} }
if (!CollectionUtils.isEmpty(skuIds)) { if (!CollectionUtils.isEmpty(skuIds)) {
for (String skuId : skuIds) { for (String skuId : skuIds) {
ListCartGoodsBO.SendGoods sendGood = goodQtyMap.get(skuId); SendGoods sendGood = goodQtyMap.get(skuId);
if (null != sendGood) { if (null != sendGood) {
product.setQty(sendGood.getQty()); product.setQty(sendGood.getQty());
product.setSpuId(productBean.getSpuId()); product.setSpuId(productBean.getSpuId());
...@@ -876,7 +907,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -876,7 +907,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
} }
} }
else { else {
ListCartGoodsBO.SendGoods sendGood = goodQtyMap.get(productBean.getSpuId()); SendGoods sendGood = goodQtyMap.get(productBean.getSpuId());
if (null != sendGood) { if (null != sendGood) {
product.setQty(sendGood.getQty()); product.setQty(sendGood.getQty());
product.setSpuId(sendGood.getGoodsId()); product.setSpuId(sendGood.getGoodsId());
...@@ -1639,4 +1670,31 @@ public class AbstractListCartGoodsService implements ListCartGoodsService { ...@@ -1639,4 +1670,31 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
return chooseGoods; return chooseGoods;
} }
private void convert2CartGoods(CartGoods cartGoods, GetProductsVo productInfo) {
cartGoods.setCartGoodsUid(UUID.randomUUID().toString());
Integer goodsType = GoodsTypeEnum.SPU_GOODS.getGoodsType();
if (productInfo.getType() == null || productInfo.getType() == 1) {
goodsType = GoodsTypeEnum.SPU_GOODS.getGoodsType();
} else {
goodsType = GoodsTypeEnum.SKU_GOODS.getGoodsType();
}
cartGoods.setGoodsType(goodsType);
cartGoods.setAmount(productInfo.getFinalPrice());
cartGoods.setCategoryName(productInfo.getCategoryName());
cartGoods.setCustomerCode(productInfo.getCustomerCode());
cartGoods.setFinalPrice(null);
cartGoods.setGoodsId(cartGoods.getSkuId());
cartGoods.setMaterialAmount(0l);
cartGoods.setName(goodsType == GoodsTypeEnum.SPU_GOODS.getGoodsType() ? productInfo.getSpuName() : productInfo.getSkuName());
cartGoods.setOriginalPrice(productInfo.getFinalPrice());
cartGoods.setOriginalMaterialAmount(0l);
cartGoods.setSpuId(productInfo.getSpuId());
cartGoods.setSkuId(cartGoods.getSkuId());
cartGoods.setSpuName(productInfo.getSpuName());
cartGoods.setSkuName(productInfo.getSkuName());
cartGoods.setCouponCode(null);
}
} }
...@@ -20,6 +20,7 @@ import cn.freemud.demo.manager.promotion.PromotionManager; ...@@ -20,6 +20,7 @@ import cn.freemud.demo.manager.promotion.PromotionManager;
import cn.freemud.demo.service.DistributeService; import cn.freemud.demo.service.DistributeService;
import cn.freemud.demo.service.MessageService; import cn.freemud.demo.service.MessageService;
import cn.freemud.demo.service.UpdateGoodsQtyService; import cn.freemud.demo.service.UpdateGoodsQtyService;
import cn.freemud.demo.utils.CommonUtils;
import cn.freemud.entities.dto.ActivityCalculationDiscountRequestDto; import cn.freemud.entities.dto.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.PromotionMessageDto; import cn.freemud.entities.dto.PromotionMessageDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto; import cn.freemud.entities.dto.activity.ActivityQueryDto;
...@@ -218,7 +219,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer ...@@ -218,7 +219,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
private GetProductBO convert2ProductBO(UpdateAddGoodsBO baseRequestBO, CartGoods cartGoods) { private GetProductBO convert2ProductBO(UpdateAddGoodsBO baseRequestBO, CartGoods cartGoods) {
GetProductBO getProductBO = new GetProductBO(); GetProductBO getProductBO = new GetProductBO();
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) { if (CommonUtils.isProductCoupon(baseRequestBO.getCouponCode(), cartGoods.getCartGoodsUid())) {
getProductBO.setGoodsId(Collections.singletonList(cartGoods.getSkuId())); getProductBO.setGoodsId(Collections.singletonList(cartGoods.getSkuId()));
} else { } else {
getProductBO.setGoodsId(Collections.singletonList(cartGoods.getGoodsId())); getProductBO.setGoodsId(Collections.singletonList(cartGoods.getGoodsId()));
...@@ -309,6 +310,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer ...@@ -309,6 +310,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
calCostBO.setChanged(addGoodsToShoppingCartBO.getChanged()); calCostBO.setChanged(addGoodsToShoppingCartBO.getChanged());
calCostBO.setShoppingCartContext(addGoodsToShoppingCartBO.getShoppingCartContext()); calCostBO.setShoppingCartContext(addGoodsToShoppingCartBO.getShoppingCartContext());
calCostBO.setValidCouponMap(addGoodsToShoppingCartBO.getValidCouponMap()); calCostBO.setValidCouponMap(addGoodsToShoppingCartBO.getValidCouponMap());
calCostBO.setSpqIdToCartUuidMap(addGoodsToShoppingCartBO.getSpqIdToCartUuidMap());
calCostBO.setToastMsg(addGoodsToShoppingCartBO.getToastMsg()); calCostBO.setToastMsg(addGoodsToShoppingCartBO.getToastMsg());
calCostBO.setIsMember(addGoodsToShoppingCartBO.getIsMember()); calCostBO.setIsMember(addGoodsToShoppingCartBO.getIsMember());
return calCostBO; return calCostBO;
...@@ -354,7 +356,11 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer ...@@ -354,7 +356,11 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
activityTip.setActivityList(activityList); activityTip.setActivityList(activityList);
shoppingCartGoodsBO.setActivityTip(activityTip); shoppingCartGoodsBO.setActivityTip(activityTip);
shoppingCartGoodsBO.setDeliveryFeeZeroReason(0); shoppingCartGoodsBO.setDeliveryFeeZeroReason(0);
// 设置提示消息和变更标记
setToastMsgIfNotExist(shoppingCartGoodsBO, setMessageBO.getToastMsg()); setToastMsgIfNotExist(shoppingCartGoodsBO, setMessageBO.getToastMsg());
if (!Objects.equals(shoppingCartGoodsBO.getChanged(),true)){
shoppingCartGoodsBO.setChanged(Objects.equals(true,setMessageBO.getChanged()));
}
return shoppingCartGoodsBO; return shoppingCartGoodsBO;
} }
...@@ -365,6 +371,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer ...@@ -365,6 +371,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
} }
CalculationDiscountBO calculationDiscountBO = promotionManager.calculationDiscount(before.getGetCalculationDiscountBO(), baseRequestDTO.getManagerService().getPromotionService()); CalculationDiscountBO calculationDiscountBO = promotionManager.calculationDiscount(before.getGetCalculationDiscountBO(), baseRequestDTO.getManagerService().getPromotionService());
calculationDiscountBO.getResult().setValidCouponMap(before.getValidCouponMap()); calculationDiscountBO.getResult().setValidCouponMap(before.getValidCouponMap());
calculationDiscountBO.getResult().setSpqIdToCartUuidMap(before.getSpqIdToCartUuidMap());
before.setCalculationDiscountBO(calculationDiscountBO); before.setCalculationDiscountBO(calculationDiscountBO);
return before; return before;
...@@ -382,7 +389,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer ...@@ -382,7 +389,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
/** /**
* 用促销价格初始化购物车行记录成交价 * 用促销价格初始化购物车行记录成交价
*/ */
ShoppingGoodsAmountBO shoppingGoodsAmountBO = distributeService.initShoppingCart(distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods()); ShoppingGoodsAmountBO shoppingGoodsAmountBO = distributeService.initShoppingCart(distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), null);
// 满减 // 满减
FullReductionBO fullReductionBO = distributeService.fullReduction(baseRequestDTO, distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), activityQueryDto); FullReductionBO fullReductionBO = distributeService.fullReduction(baseRequestDTO, distributeBO.getCalculationDiscountBO().getResult(), distributeBO.getCartGoods(), activityQueryDto);
...@@ -456,17 +463,13 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer ...@@ -456,17 +463,13 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
if (CollectionUtils.isNotEmpty(productStock)){ if (CollectionUtils.isNotEmpty(productStock)){
availableStocks = productStock.get(0); availableStocks = productStock.get(0);
} }
if (availableStocks != null) {
if (availableStocks.getQty() == null
|| availableStocks.getQty() < baseRequestDTO.getQty()) {
Integer stock = 0;
if ((stock = availableStocks.getQty()) > 0) {
throw new BizServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE, "仅剩" + stock + "件库存了");
}
throw new ServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE);
}
}
int stock = availableStocks == null || availableStocks.getQty() == null ? 0 : availableStocks.getQty();
if (stock <= 0) {
throw new ServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE);
} else if (stock < baseRequestDTO.getQty()) {
throw new BizServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE, "仅剩" + stock + "件库存了");
}
} }
} }
...@@ -7,6 +7,7 @@ import cn.freemud.demo.entities.bo.promotion.GetActivityBO; ...@@ -7,6 +7,7 @@ import cn.freemud.demo.entities.bo.promotion.GetActivityBO;
import cn.freemud.demo.manager.product.ProductManager; import cn.freemud.demo.manager.product.ProductManager;
import cn.freemud.demo.manager.promotion.PromotionManager; import cn.freemud.demo.manager.promotion.PromotionManager;
import cn.freemud.demo.service.DistributeService; import cn.freemud.demo.service.DistributeService;
import cn.freemud.demo.utils.CommonUtils;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto; import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto; import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto; import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
...@@ -37,7 +38,7 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -37,7 +38,7 @@ public class DistributeServiceImpl implements DistributeService {
@Override @Override
public ShoppingGoodsAmountBO initShoppingCart(CalculationDiscountBO.CalculationDiscountResult discountResult, List<CartGoods> cartGoodsList) { public ShoppingGoodsAmountBO initShoppingCart(CalculationDiscountBO.CalculationDiscountResult discountResult, List<CartGoods> cartGoodsList, String couponCode) {
ShoppingGoodsAmountBO shoppingGoodsAmountBO = new ShoppingGoodsAmountBO(); ShoppingGoodsAmountBO shoppingGoodsAmountBO = new ShoppingGoodsAmountBO();
/** /**
...@@ -50,8 +51,9 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -50,8 +51,9 @@ public class DistributeServiceImpl implements DistributeService {
long totalOriginalAmount = 0L, totalAmount = 0L, totalPackageAmount = 0L; long totalOriginalAmount = 0L, totalAmount = 0L, totalPackageAmount = 0L;
long originalAmount = 0L, amount = 0L, packageAmount = 0L; long originalAmount = 0L, amount = 0L, packageAmount = 0L;
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
originalAmount = 0L;amount = 0L;packageAmount = 0L; originalAmount = 0L;amount = 0L;packageAmount = 0L;
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)){ if (CommonUtils.isProductCoupon(cartGoods.getCouponCode(), cartGoods.getCartGoodsUid())){
Map<String, CheckSpqInfoResponseDto> validCouponMap = discountResult.getValidCouponMap(); Map<String, CheckSpqInfoResponseDto> validCouponMap = discountResult.getValidCouponMap();
if (validCouponMap != null && validCouponMap.get(cartGoods.getSpuId()) != null){ if (validCouponMap != null && validCouponMap.get(cartGoods.getSpuId()) != null){
cartGoods.setSpuId(validCouponMap.get(cartGoods.getSpuId()).getSpuId()); cartGoods.setSpuId(validCouponMap.get(cartGoods.getSpuId()).getSpuId());
...@@ -62,7 +64,7 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -62,7 +64,7 @@ public class DistributeServiceImpl implements DistributeService {
originalAmount = cartGoods.getOriginalPrice() * cartGoods.getQty(); originalAmount = cartGoods.getOriginalPrice() * cartGoods.getQty();
cartGoods.setOriginalAmount(originalAmount); cartGoods.setOriginalAmount(originalAmount);
this.rowRealAmount(goods, cartGoods); this.rowRealAmount(goods, cartGoods, couponCode);
//成交价行记录 //成交价行记录
amount = cartGoods.getAmount(); amount = cartGoods.getAmount();
totalAmount += amount; totalAmount += amount;
...@@ -93,6 +95,7 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -93,6 +95,7 @@ public class DistributeServiceImpl implements DistributeService {
activityTypeEnums.add(ActivityTypeEnum.TYPE_12); activityTypeEnums.add(ActivityTypeEnum.TYPE_12);
activityTypeEnums.add(ActivityTypeEnum.TYPE_3); activityTypeEnums.add(ActivityTypeEnum.TYPE_3);
activityTypeEnums.add(ActivityTypeEnum.TYPE_31); activityTypeEnums.add(ActivityTypeEnum.TYPE_31);
activityTypeEnums.add(ActivityTypeEnum.TYPE_230);
GetActivityBO getActivityBO = new GetActivityBO(); GetActivityBO getActivityBO = new GetActivityBO();
getActivityBO.setActivityTypeEnums(activityTypeEnums); getActivityBO.setActivityTypeEnums(activityTypeEnums);
...@@ -138,7 +141,7 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -138,7 +141,7 @@ public class DistributeServiceImpl implements DistributeService {
if (CollectionUtils.isNotEmpty(discountMap.getDiscounts())) { if (CollectionUtils.isNotEmpty(discountMap.getDiscounts())) {
sum = discountMap.getDiscounts() sum = discountMap.getDiscounts()
.stream() .stream()
.filter(d -> typeEnums.contains(d.getType())) .filter(d -> typeEnums.contains(d.getType()) && !d.getType().equals(ActivityTypeEnum.TYPE_230.getCode()))
.mapToLong(CalculationDiscountBO.CalculationDiscountResult.Goods.GoodsDiscount::getDiscount) .mapToLong(CalculationDiscountBO.CalculationDiscountResult.Goods.GoodsDiscount::getDiscount)
.sum(); .sum();
cart.setAmount(cart.getAmount() + sum); cart.setAmount(cart.getAmount() + sum);
...@@ -217,7 +220,7 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -217,7 +220,7 @@ public class DistributeServiceImpl implements DistributeService {
private void rowRealAmount(List<CalculationDiscountBO.CalculationDiscountResult.Goods> goods, CartGoods cartGoods) { private void rowRealAmount(List<CalculationDiscountBO.CalculationDiscountResult.Goods> goods, CartGoods cartGoods, String couponCode) {
CalculationDiscountBO.CalculationDiscountResult.Goods find = goods CalculationDiscountBO.CalculationDiscountResult.Goods find = goods
.stream().filter((k) -> k.getCartGoodsUid().equals(cartGoods.getCartGoodsUid())) .stream().filter((k) -> k.getCartGoodsUid().equals(cartGoods.getCartGoodsUid()))
...@@ -227,7 +230,14 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -227,7 +230,14 @@ public class DistributeServiceImpl implements DistributeService {
if (find == null) return; if (find == null) return;
cartGoods.setAmount(find.getRealAmount()); cartGoods.setAmount(find.getRealAmount());
//cartGoods.setOriginalAmount(find.getOriginalPrice()); //cartGoods.setOriginalAmount(find.getOriginalPrice());
cartGoods.setCurrentCouponDiscount(0);
if (CollectionUtils.isNotEmpty(find.getDiscounts())){
CalculationDiscountBO.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = find.getDiscounts().stream()
.filter(p -> p.getActivityCode().equals(couponCode)).findFirst().orElse(null);
if (goodsDiscount != null){
cartGoods.setCurrentCouponDiscount(goodsDiscount.getDiscount() == null ? 0 : goodsDiscount.getDiscount().intValue());
}
}
/** /**
* 套餐的原价 * 套餐的原价
...@@ -256,6 +266,14 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -256,6 +266,14 @@ public class DistributeServiceImpl implements DistributeService {
} }
else { else {
amount += mt.getRealAmount(); amount += mt.getRealAmount();
choice.setCurrentCouponDiscount(0);
if (CollectionUtils.isNotEmpty(mt.getDiscounts())){
CalculationDiscountBO.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = mt.getDiscounts().stream()
.filter(p -> p.getActivityCode().equals(couponCode)).findFirst().orElse(null);
if (goodsDiscount != null){
choice.setCurrentCouponDiscount(goodsDiscount.getDiscount() == null ? 0 : goodsDiscount.getDiscount().intValue());
}
}
choice.setAmount(mt.getRealAmount().longValue()); choice.setAmount(mt.getRealAmount().longValue());
} }
originPrice += choice.getFinalPrice() * choice.getQty()*cartGoods.getQty(); originPrice += choice.getFinalPrice() * choice.getQty()*cartGoods.getQty();
...@@ -274,8 +292,18 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -274,8 +292,18 @@ public class DistributeServiceImpl implements DistributeService {
for (CartGoods.MaterialGoods mg : cartGoods.getProductMaterialList()) { for (CartGoods.MaterialGoods mg : cartGoods.getProductMaterialList()) {
CalculationDiscountBO.CalculationDiscountResult.Goods.SmallMaterial sm = sChoices.get(mg.getSpuId()); CalculationDiscountBO.CalculationDiscountResult.Goods.SmallMaterial sm = sChoices.get(mg.getSpuId());
if (sm != null) { if (sm != null) {
mg.setCurrentCouponDiscount(0);
if (CollectionUtils.isNotEmpty(sm.getDiscounts())){
CalculationDiscountBO.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = sm.getDiscounts().stream()
.filter(p -> p.getActivityCode().equals(couponCode)).findFirst().orElse(null);
if (goodsDiscount != null){
mg.setCurrentCouponDiscount(goodsDiscount.getDiscount() == null ? 0 : goodsDiscount.getDiscount().intValue());
}
}
mg.setAmount(sm.getRealAmount().longValue()); mg.setAmount(sm.getRealAmount().longValue());
} }
mg.setQty(mg.getQty() * cartGoods.getQty());
mg.setOriginalAmount(mg.getFinalPrice() * mg.getQty());
} }
} }
if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) { if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
...@@ -357,7 +385,8 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -357,7 +385,8 @@ public class DistributeServiceImpl implements DistributeService {
CalculationDiscountBO.CalculationDiscountResult.Goods goods = discountForGift.get(k); CalculationDiscountBO.CalculationDiscountResult.Goods goods = discountForGift.get(k);
CalculationDiscountBO.CalculationDiscountResult.Goods.GoodsDiscount discount = goods.getDiscounts() CalculationDiscountBO.CalculationDiscountResult.Goods.GoodsDiscount discount = goods.getDiscounts()
.stream() .stream()
.filter(g -> ActivityTypeEnum.TYPE_63.getCode().equals(g.getType()) ||ActivityTypeEnum.TYPE_62.getCode().equals(g.getType()) || ActivityTypeEnum.TYPE_61.getCode().equals(g.getType())) .filter(g -> ActivityTypeEnum.TYPE_63.getCode().equals(g.getType()) ||ActivityTypeEnum.TYPE_62.getCode().equals(g.getType()) || ActivityTypeEnum.TYPE_61.getCode().equals(g.getType())
|| ActivityTypeEnum.TYPE_230.getCode().equals(g.getType()))
.findFirst() .findFirst()
.get(); .get();
CartGoods cartGood = new CartGoods(); CartGoods cartGood = new CartGoods();
......
...@@ -4,13 +4,17 @@ import cn.freemud.demo.entities.bo.goods.BenefitBeanBO; ...@@ -4,13 +4,17 @@ import cn.freemud.demo.entities.bo.goods.BenefitBeanBO;
import cn.freemud.demo.entities.bo.goods.CalculationDiscountBO; import cn.freemud.demo.entities.bo.goods.CalculationDiscountBO;
import cn.freemud.demo.entities.bo.promotion.ActivityBO; import cn.freemud.demo.entities.bo.promotion.ActivityBO;
import cn.freemud.demo.service.MessageService; import cn.freemud.demo.service.MessageService;
import cn.freemud.entities.dto.BenefitBeanDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.ActivityList; import cn.freemud.entities.vo.ActivityList;
import cn.freemud.enums.ActivityTypeEnum; import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.GiftTypeEnum;
import cn.freemud.utils.WebUtil; import cn.freemud.utils.WebUtil;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -91,6 +95,32 @@ public class MessageServiceImpl implements MessageService { ...@@ -91,6 +95,32 @@ public class MessageServiceImpl implements MessageService {
activityList.add(notInShopping); activityList.add(notInShopping);
} }
} }
if (Objects.equals(ActivityTypeEnum.TYPE_230.getCode(), activityBO.getActivityType())) {
ActivityList notInShopping = new ActivityList();
// 规则:满5赠奶茶2件,炸鸡1件,满10赠布丁3件,牛奶1份,鸡翅2份,
// 提示语:满5元可获赠奶茶*2,炸鸡*1
//阶梯满赠
if (GiftTypeEnum.TYPE_1.getType().equals(activityBO.getActivitySubType())) {
notInShopping.setTipType(6);
}
//每满赠
else if (GiftTypeEnum.TYPE_2.getType().equals(activityBO.getActivitySubType())) {
notInShopping.setTipType(7);
}
Collections.sort(benefitBeanBOList);
BenefitBeanBO benefitBean = benefitBeanBOList.get(0);
int len = benefitBean.getSendGoodsList().size();
notInShopping.setSatisfy(WebUtil.formatAmount(benefitBean.getThresholdAmount() * 1.00 / 100).toString());
List<ActivityList.SendGoods> sends = new ArrayList();
for (int i = 0; i < len; i++) {
ActivityList.SendGoods goods = new ActivityList.SendGoods();
goods.setQty(benefitBean.getSendGoodsList().get(i).getSendNumber());
goods.setGoodsName(benefitBean.getSendGoodsList().get(i).getGoodsName());
sends.add(goods);
}
notInShopping.setSends(sends);
activityList.add(notInShopping);
}
return activityList; return activityList;
} }
/** /**
...@@ -105,40 +135,69 @@ public class MessageServiceImpl implements MessageService { ...@@ -105,40 +135,69 @@ public class MessageServiceImpl implements MessageService {
ArrayList<ActivityList> result = new ArrayList<>(); ArrayList<ActivityList> result = new ArrayList<>();
ActivityList satisfyList = new ActivityList(); ActivityList satisfyList = new ActivityList();
CalculationDiscountBO.CalculationDiscountResult.ActivityPrompt activityPrompt = activityPrompts.get(0); CalculationDiscountBO.CalculationDiscountResult.ActivityPrompt activityPrompt = activityPrompts.get(0);
if (activityPrompt.getAlreadyDiscountAmount() == null if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType()) || Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), activityResponseDto.getActivityType())) {
|| activityPrompt.getAlreadyDiscountAmount() == 0) { if (activityPrompt.getAlreadyDiscountAmount() == null
messageBuilder.append("满 <span style=\"color:#fa5555\">") || activityPrompt.getAlreadyDiscountAmount() == 0) {
.append(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100)) messageBuilder.append("满 <span style=\"color:#fa5555\">")
.append("</span> 减 <span style=\"color:#fa5555\">") .append(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100))
.append(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100)) .append("</span> 减 <span style=\"color:#fa5555\">")
.append("</span> ") .append(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100))
.append("还差 <span style=\"color:#fa5555\">") .append("</span> ")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100)) .append("还差 <span style=\"color:#fa5555\">")
.append("</span> 元"); .append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
// 满足 X 元 减 Y 元 还差 Z元 .append("</span> 元");
satisfyList.setTipType(3); // 满足 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());
}
}
if (Objects.equals(ActivityTypeEnum.TYPE_230.getCode(), activityResponseDto.getActivityType()) && CollectionUtils.isNotEmpty(activityPrompt.getSendGoods())) {
satisfyList.setTipType(10);
List<ActivityList.SendGoods> sends = new ArrayList();
for (CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendGoods sendGood : activityPrompt.getSendGoods()) {
ActivityList.SendGoods send = new ActivityList.SendGoods();
send.setGoodsName(sendGood.getGoodsName());
send.setQty(sendGood.getSendNumber());
sends.add(send);
}
satisfyList.setSends(sends);
satisfyList.setSatisfy(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100).toString()); 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()); satisfyList.setMissing(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100).toString());
} else { if (GiftTypeEnum.TYPE_1.getType().equals(activityResponseDto.getActivitySubType())) {
Long toDiscountAmout; satisfyList.setTipType(8);
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) { }
toDiscountAmout = activityPrompt.getDiscountAmout() + activityPrompt.getAlreadyDiscountAmount(); else {
} else { satisfyList.setTipType(7);
toDiscountAmout = activityPrompt.getDiscountAmout(); }
if (activityPrompt.getTotalAmount()>=activityPrompt.getThresholdAmount()) {
if (GiftTypeEnum.TYPE_1.getType().equals(activityResponseDto.getActivitySubType())) {
satisfyList.setTipType(10);
}
else {
satisfyList.setTipType(7);
}
} }
//已减 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());
} }
result.add(satisfyList); result.add(satisfyList);
return result; return result;
......
package cn.freemud.demo.utils;
import cn.freemud.demo.enums.BizTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import org.apache.commons.lang.StringUtils;
public class CommonUtils {
public static Boolean isProductCoupon(String couponCode, String spqid){
if (StringUtils.isNotBlank(couponCode) || spqid.startsWith(CommonsConstant.COUPON_PREFIX)) {
return true;
}
return false;
}
public static String getCouponCode(String couponCode, String spqid){
if (spqid.startsWith(CommonsConstant.COUPON_PREFIX)){ // 兼容老版本
couponCode = spqid.substring(CommonsConstant.COUPON_PREFIX.length());
}
return couponCode;
}
}
...@@ -920,9 +920,6 @@ public class CouponServiceImpl implements CouponService { ...@@ -920,9 +920,6 @@ public class CouponServiceImpl implements CouponService {
if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) { if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null; return null;
} }
if (CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
boolean productValid = false; boolean productValid = false;
Integer couponType = 0; Integer couponType = 0;
GetCouponDetailResponseDto.Details couponActivityDetail = null; GetCouponDetailResponseDto.Details couponActivityDetail = null;
......
...@@ -503,6 +503,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -503,6 +503,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo,updateShoppingCartGoodsQtyRequestVo.getOrderType()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo,updateShoppingCartGoodsQtyRequestVo.getOrderType());
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, updateShoppingCartGoodsQtyRequestVo.getOrderType()); ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, updateShoppingCartGoodsQtyRequestVo.getOrderType());
// 根据商户门店判断是否走新促销
if (grayPush(partnerId,storeId,"2")) { if (grayPush(partnerId,storeId,"2")) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult = null; CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult = null;
discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType
...@@ -856,17 +857,17 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -856,17 +857,17 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING); return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
} }
//打包带走外卖 //打包带走外卖
if (StringUtils.isNotBlank(shoppingCartInfoRequestVo.getCardCode()) && shoppingCartInfoRequestVo.getOrderType() == 2 if (StringUtils.isNotBlank(shoppingCartInfoRequestVo.getCardCode()) && Objects.equals(shoppingCartInfoRequestVo.getOrderType(), 2)
&& StringUtils.isBlank(shoppingCartInfoRequestVo.getReceiveId())) { && StringUtils.isBlank(shoppingCartInfoRequestVo.getReceiveId())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING); return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
} }
String partnerId = shoppingCartInfoRequestVo.getPartnerId(); String partnerId = shoppingCartInfoRequestVo.getPartnerId();
String storeId = shoppingCartInfoRequestVo.getShopId(); String storeId = shoppingCartInfoRequestVo.getShopId();
// 是否走重构
if (SDKCommonBaseContextWare.getBean(ShoppingCartNewServiceImpl.class).newShoppingCartGray(shoppingCartInfoRequestVo.getPartnerId(), shoppingCartInfoRequestVo.getShopId())){ if (SDKCommonBaseContextWare.getBean(ShoppingCartNewServiceImpl.class).newShoppingCartGray(shoppingCartInfoRequestVo.getPartnerId(), shoppingCartInfoRequestVo.getShopId())){
Map requestMap = mapperFacade.map(shoppingCartInfoRequestVo, Map.class); Map requestMap = mapperFacade.map(shoppingCartInfoRequestVo, Map.class);
BaseResponse<BaseListCartGoodsVO> goodsList = null; BaseResponse<BaseListCartGoodsVO> goodsList = shoppingCartDemoController.listCartGoods(requestMap);
goodsList = shoppingCartDemoController.listCartGoods(requestMap);
if (goodsList == null || !ResponseResult.SUCCESS.getCode().equals(goodsList.getCode())) { if (goodsList == null || !ResponseResult.SUCCESS.getCode().equals(goodsList.getCode())) {
return goodsList; return goodsList;
......
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