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 {
couponPromotionVO.setCouponCode(baseRequestDTO.getCouponCode());
couponPromotionVO.setOrderType(baseRequestDTO.getOrderType());
couponPromotionVO.setFlg(baseRequestDTO.getFlag());
couponPromotionVO.setUnChooseCouponCode(baseRequestDTO.getUnChooseCouponCode());
return couponPromotionVO;
}
......
......@@ -3,6 +3,7 @@ package cn.freemud.demo.adapter.manager;
import cn.freemud.demo.entities.bo.product.ProductStockBO;
import cn.freemud.demo.entities.bo.goods.ValiadShopProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import cn.freemud.utils.BeanUtil;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
......@@ -19,7 +20,7 @@ public class ProductDTO2BOAdapter {
@Resource
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.setGoodsId(productBeanDTO.getPid());
......
......@@ -9,6 +9,7 @@ import cn.freemud.demo.manager.customer.CustomerService;
import cn.freemud.demo.manager.product.ProductService;
import cn.freemud.demo.manager.promotion.PromotionService;
import cn.freemud.demo.manager.store.StoreService;
import cn.freemud.demo.utils.CommonUtils;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ComboxGoodsRequestVo;
import cn.freemud.entities.vo.MaterialRequestVo;
......@@ -63,6 +64,7 @@ public class AddGoodsBOAdapter {
PlatformAddGoodsBO platformAddGoodsBO = BeanUtil.convertBean(baseRequestDTO, PlatformAddGoodsBO::new);
CartGoods platformProductBO = convert2PlatformProductBO(baseRequestDTO);
platformProductBO.setAddCartTime(System.currentTimeMillis());
platformAddGoodsBO.setAddGoods(platformProductBO);
ManagerServiceBO managerService = ManagerServiceBO.builder()
......@@ -108,13 +110,8 @@ public class AddGoodsBOAdapter {
platformProductBO.setGoodsId(goodsId);
platformProductBO.setQty(qty);
Integer goodsType = StringUtils.isEmpty(skuId)||ObjectUtils.equals(spuId,skuId) ? GoodsTypeEnum.SPU_GOODS.getGoodsType() : GoodsTypeEnum.SKU_GOODS.getGoodsType();
if (spuId.startsWith(CommonsConstant.COUPON_PREFIX)) {
if (StringUtils.isNotBlank(skuId)){
goodsType = GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType();
} else {
goodsType = GoodsTypeEnum.COUPON_GOODS.getGoodsType();
}
if (CommonUtils.isProductCoupon(baseRequestDTO.getCouponCode(), spuId)) {
goodsType = GoodsTypeEnum.COUPON_GOODS.getGoodsType();
} else if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductComboList()) || CollectionUtils.isNotEmpty(baseRequestDTO.getProductGroupList())) {
goodsType = GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType();
}
......
......@@ -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.enums.BizTypeEnum;
import cn.freemud.utils.BeanUtil;
import ma.glasnost.orika.MapperFacade;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class AddGoodsVOAdapter {
@Resource
private MapperFacade mapperFacade;
public BaseAddGoodsVO convert2AddGoodsVO(String bizType, ShoppingCartGoodsBO baseAddGoodsBO) {
BaseAddGoodsVO baseAddGoodsVO;
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;
import cn.freemud.base.entity.BaseResponse;
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.add.BaseAddGoodsBO;
import cn.freemud.demo.entities.bo.goods.list.ListCartGoodsBO;
......@@ -177,7 +178,7 @@ public class ShoppingCartDemoController {
*/
ListCartGoodsRequestDTO baseRequestDTO = mapperFacade.map(request, ListCartGoodsRequestDTO.class);
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);
}
......
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 {
private HashMap<String, CheckSpqInfoResponseDto> validCouponMap;
private HashMap<String, List<String>> spqIdToCartUuidMap;
/**
* 前端用来提示的信息
*/
......
package cn.freemud.demo.entities.bo.goods;
import cn.freemud.entities.dto.BenefitBeanDto;
import lombok.Data;
import java.util.List;
@Data
public class BenefitBeanBO {
public class BenefitBeanBO implements Comparable<BenefitBeanBO>{
/**
* 优惠券名称
......@@ -23,5 +26,90 @@ public class BenefitBeanBO {
private Integer benefitSeq;
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 {
private Long deliveryAmount;
private HashMap<String, CheckSpqInfoResponseDto> validCouponMap;
private HashMap<String, List<String>> spqIdToCartUuidMap;
private ShoppingCartContext shoppingCartContext;
......
......@@ -8,6 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -88,6 +89,7 @@ public class CalculationDiscountBO {
* 校验后有效的商品券map
*/
private Map<String, CheckSpqInfoResponseDto> validCouponMap;
private HashMap<String, List<String>> spqIdToCartUuidMap;
/**
* 扣减库存
*/
......@@ -115,6 +117,8 @@ public class CalculationDiscountBO {
private Long thresholdAmount;
private Long totalAmount;
private Long alreadyDiscountAmount;
private List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.SendGoods> sendGoods;
}
@Data
......
......@@ -15,6 +15,7 @@ public class DiscountResultBO {
private Boolean isMember;
private HashMap<String, CheckSpqInfoResponseDto> validCouponMap;
private HashMap<String, List<String>> spqIdToCartUuidMap;
/**
* 前端用来提示的信息
......
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.dto.BaseRequestDTO;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
......@@ -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 {
*/
private String monthlyCardCode;
/**
* 取消选择的商品券
*/
private String unChooseCouponCode;
@Data
public final static class BuyMemberCard {
......
......@@ -39,6 +39,10 @@ public class ProductBO {
* 数量
*/
private Integer qty;
/**
* 加料最大限购
*/
private Integer maxNum;
private String category;
/**
* 分类名
......
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.CreateOrderVo;
import lombok.Data;
......@@ -62,7 +64,7 @@ public class ShoppingCartGoodsApportionBO {
/**
* 优惠券code列表
*/
private List<couponCode> couponCodes;
private List<CouponCode> couponCodes;
/**
* 微信appId
......@@ -119,40 +121,6 @@ public class ShoppingCartGoodsApportionBO {
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
......
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.ManagerServiceBO;
import cn.freemud.entities.vo.CartGoods;
......@@ -49,7 +51,7 @@ public class ListCartGoodsBO extends BaseBo {
/**
* 优惠券code列表
*/
private List<couponCode> couponCodes;
private List<CouponCode> couponCodes;
/**
* 微信appId
......@@ -99,48 +101,10 @@ public class ListCartGoodsBO extends BaseBo {
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 {
*/
private Integer activityType;
/**
* 活动子类型 1 阶梯 2 每满
*/
private Integer activitySubType;
/**
* 适用于优惠券活动,优惠券类型,0:满减券 1:代金券
*/
private Integer couponType;
......
......@@ -121,6 +121,10 @@ public class GetCalculationDiscountBO {
*/
private Long originalPrice;
/**
* 加车时间
*/
private Long addCartTime;
/**
* 折扣比例
* 例如8折为80
*/
......
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.demo.entities.bo.goods.ValidateShopProductRequestBO;
import cn.freemud.demo.entities.bo.coupon.CheckSpqBO;
......@@ -22,6 +24,7 @@ import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.thirdparty.CardBinClient;
import cn.freemud.service.thirdparty.CouponOnlineClient;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.RedisUtil;
import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductType;
//import com.freemud.card.sdk.comm.Finals;
......@@ -67,7 +70,7 @@ public class KgdCouponServiceImpl implements CouponService {
@Override
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())) {
return null;
}
......@@ -99,42 +102,48 @@ public class KgdCouponServiceImpl implements CouponService {
CheckSpqBO result = new CheckSpqBO();
GetCouponDetailBO getCouponDetail = convert2GetCouponDetailBO(getCheckSpqBo);
// 如果是商品券,获取商品券信息
// 如果是商品券/换购券,获取券信息
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())) {
return null;
}
if (CollectionUtils.isEmpty(couponDetail.getDetails())) {
return null;
}
Integer couponType = 0;
CouponDetailBO.Details couponActivityDetail = null;
// 多规格券
if (StringUtils.isNotBlank(getCheckSpqBo.getSkuId())){
boolean productValid = false;
for (CouponDetailBO.Details detail : couponDetail.getDetails()) {
if (productValid) break;
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus())) continue;
if (Objects.nonNull(couponActivityDetail)){
break;
}
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus()) && !CouponStatus.STATUS_2.getCode().equals(detail.getStatus())){
continue;
}
for (CouponDetailBO.ActiveProduct activeProduct : detail.getActiveProduct()) {
if (getCheckSpqBo.getSkuId().equals(activeProduct.getProductIdPartner())) {
productValid = true;
couponActivityDetail = detail;
// todo 和 CouponServiceImpl.checkSpqInfo不一致
couponType = detail.getType();
break;
}
}
}
//检查商品是否有效
if (!productValid) {
return null;
}
} 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();
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()) {
couPonstoreIds.add(activeRestrictionVO.getStoreIdPartner());
}
......@@ -142,17 +151,16 @@ public class KgdCouponServiceImpl implements CouponService {
if (CollectionUtils.isNotEmpty(couPonstoreIds) && !couPonstoreIds.contains(getCheckSpqBo.getStoreId())) {
return null;
}
//券返回的商品id
List<String> skuIds = Lists.newArrayList();
// 券返回的商品id
String skuId = getCheckSpqBo.getSkuId();
if (StringUtils.isBlank(skuId)){
skuId = couponDetail.getDetails().get(0).getActiveProduct().get(0).getProductIdPartner();
if(StringUtils.isBlank(skuId)){
skuId = couponActivityDetail.getActiveProduct().get(0).getProductIdPartner();
}
skuIds.add(skuId);
// 通过skuid查询spuid
GetProductBySkuIdBO getProductBySkuIdBO = convert2GetProductBySkuIdBO(getCheckSpqBo);
GetProductBySkuIdBO getProductBySkuIdBO = convert2GetProductBySkuIdBO(getCheckSpqBo,skuId);
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);
if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) {
return null;
......@@ -237,13 +245,11 @@ public class KgdCouponServiceImpl implements CouponService {
return getCouponDetailBO;
}
private GetProductBySkuIdBO convert2GetProductBySkuIdBO(GetCheckSpqBo getCheckSpqBo) {
private GetProductBySkuIdBO convert2GetProductBySkuIdBO(GetCheckSpqBo getCheckSpqBo,String skuId) {
GetProductBySkuIdBO getProductBySkuIdBO = new GetProductBySkuIdBO();
getProductBySkuIdBO.setMenuType(getCheckSpqBo.getMenuType());
getProductBySkuIdBO.setPartnerId(getCheckSpqBo.getPartnerId());
List<String> skuids = new ArrayList<>();
skuids.add(getCheckSpqBo.getSkuId());
getProductBySkuIdBO.setSkuids(skuids);
getProductBySkuIdBO.setSkuids(Collections.singletonList(skuId));
getProductBySkuIdBO.setStoreId(getCheckSpqBo.getStoreId());
return 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.GetRequiredProductListBO;
import cn.freemud.demo.entities.bo.product.ProductStockBO;
import cn.freemud.entities.dto.GetProductStockRequestDto;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import cn.freemud.entities.dto.ProductBaseResponse;
import cn.freemud.entities.dto.RequiredProductRequest;
import cn.freemud.entities.dto.*;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.ItemService;
......@@ -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.valid.ValiadShopProductResponse;
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.stereotype.Service;
......@@ -67,11 +65,11 @@ public class KgdProductServiceImpl implements ProductService {
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);
List<ProductBO> productList = new ArrayList<>();
for (ProductBeanDTO dto : productBeanListSpuClass){
for (GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean dto : productBeanListSpuClass){
ProductBO platformProductBO = productDTO2BOAdapter.convert2ProductBO(dto);
productList.add(platformProductBO);
}
......@@ -94,14 +92,14 @@ public class KgdProductServiceImpl implements ProductService {
GetProductStockRequestDto getProductStockRequestDto = productBO2DTOAdapter.convert2GetProductStockDto(getProductStock);
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);
}
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);
list.add(productStockBO);
}
......
......@@ -14,7 +14,7 @@ public interface DistributeService {
* 初始化价格
*/
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);
......
......@@ -4,6 +4,7 @@ import cn.freemud.adapter.ActivityAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.CustomerScoreConstant;
import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.demo.entities.bo.SendGoods;
import cn.freemud.demo.entities.bo.promotion.GetActivityBO;
import cn.freemud.demo.constant.ResponseConstant;
import cn.freemud.demo.entities.bo.goods.ShoppingCartGoodsBO;
......@@ -24,6 +25,7 @@ import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.CouponService;
import cn.freemud.service.impl.AssortmentSdkService;
import cn.freemud.service.impl.calculate.CalculationCommonService;
import cn.freemud.utils.LogUtil;
......@@ -86,6 +88,9 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
@Autowired
private MessageService messageService;
@Autowired
private CouponService couponService;
private static final String limitCartKey = "ecology:kgd:wxappconfig:open_platform_partner_wxapp_config:appkey_";
......@@ -209,6 +214,29 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
List<CartGoods> allCartGoodsList = assortmentSdkService.getShoppingCart(baseRequestBO.getPartnerId(), baseRequestBO.getShopId(), userInfo.getUserId(), baseRequestBO.getSessionId(), null, shoppingCartBaseService);
if (CollectionUtils.isEmpty(allCartGoodsList)) {
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);
......@@ -287,6 +315,8 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
calCostBO.setShoppingCartContext(addGoodsToShoppingCartBO.getShoppingCartContext());
calCostBO.setToastMsg(addGoodsToShoppingCartBO.getToastMsg());
calCostBO.setValidCouponMap(addGoodsToShoppingCartBO.getValidCouponMap());
calCostBO.setSpqIdToCartUuidMap(addGoodsToShoppingCartBO.getSpqIdToCartUuidMap());
calCostBO.setIsMember(addGoodsToShoppingCartBO.getIsMember());
return calCostBO;
......@@ -423,6 +453,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
if (CollectionUtils.isNotEmpty(before.getGetCalculationDiscountBO().getGoods())){
CalculationDiscountBO calculationDiscountBO = promotionManager.calculationDiscount(before.getGetCalculationDiscountBO(), baseRequestDTO.getManagerService().getPromotionService());
calculationDiscountBO.getResult().setValidCouponMap(before.getValidCouponMap());
calculationDiscountBO.getResult().setSpqIdToCartUuidMap(before.getSpqIdToCartUuidMap());
before.setCalculationDiscountBO(calculationDiscountBO);
}
......@@ -438,7 +469,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
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);
......@@ -799,7 +830,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
// goodsId->qty
Map<String, Integer> map = baseRequestDTO.getSendGoods()
.stream()
.collect(Collectors.toMap(ListCartGoodsBO.SendGoods::getGoodsId, ListCartGoodsBO.SendGoods::getQty));
.collect(Collectors.toMap(SendGoods::getGoodsId, SendGoods::getQty));
//goodsId -> originalPrice
Map<String, Long> OriginalPrice = sendGoods.get(0)
......@@ -834,15 +865,15 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
*/
public List<CreateOrderVo.PremiumExchangeActivity.Product> buildPremiumExchangeActivityProduct(ListCartGoodsBO baseRequestDTO) {
List<ListCartGoodsBO.SendGoods> sendGoods = baseRequestDTO.getSendGoods();
List<SendGoods> sendGoods = baseRequestDTO.getSendGoods();
List<String> goodsIds = sendGoods
.stream()
.map(ListCartGoodsBO.SendGoods::getGoodsId)
.map(SendGoods::getGoodsId)
.collect(Collectors.toList());
Map<String, ListCartGoodsBO.SendGoods> goodQtyMap = sendGoods
Map<String, SendGoods> goodQtyMap = sendGoods
.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.setMenuType(baseRequestDTO.getMenuType());
getProductBO.setPartnerId(baseRequestDTO.getPartnerId());
......@@ -865,7 +896,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
}
if (!CollectionUtils.isEmpty(skuIds)) {
for (String skuId : skuIds) {
ListCartGoodsBO.SendGoods sendGood = goodQtyMap.get(skuId);
SendGoods sendGood = goodQtyMap.get(skuId);
if (null != sendGood) {
product.setQty(sendGood.getQty());
product.setSpuId(productBean.getSpuId());
......@@ -876,7 +907,7 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
}
}
else {
ListCartGoodsBO.SendGoods sendGood = goodQtyMap.get(productBean.getSpuId());
SendGoods sendGood = goodQtyMap.get(productBean.getSpuId());
if (null != sendGood) {
product.setQty(sendGood.getQty());
product.setSpuId(sendGood.getGoodsId());
......@@ -1639,4 +1670,31 @@ public class AbstractListCartGoodsService implements ListCartGoodsService {
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;
import cn.freemud.demo.service.DistributeService;
import cn.freemud.demo.service.MessageService;
import cn.freemud.demo.service.UpdateGoodsQtyService;
import cn.freemud.demo.utils.CommonUtils;
import cn.freemud.entities.dto.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.PromotionMessageDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
......@@ -218,7 +219,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
private GetProductBO convert2ProductBO(UpdateAddGoodsBO baseRequestBO, CartGoods cartGoods) {
GetProductBO getProductBO = new GetProductBO();
if (cartGoods.getCartGoodsUid().startsWith(CommonsConstant.COUPON_PREFIX)) {
if (CommonUtils.isProductCoupon(baseRequestBO.getCouponCode(), cartGoods.getCartGoodsUid())) {
getProductBO.setGoodsId(Collections.singletonList(cartGoods.getSkuId()));
} else {
getProductBO.setGoodsId(Collections.singletonList(cartGoods.getGoodsId()));
......@@ -309,6 +310,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
calCostBO.setChanged(addGoodsToShoppingCartBO.getChanged());
calCostBO.setShoppingCartContext(addGoodsToShoppingCartBO.getShoppingCartContext());
calCostBO.setValidCouponMap(addGoodsToShoppingCartBO.getValidCouponMap());
calCostBO.setSpqIdToCartUuidMap(addGoodsToShoppingCartBO.getSpqIdToCartUuidMap());
calCostBO.setToastMsg(addGoodsToShoppingCartBO.getToastMsg());
calCostBO.setIsMember(addGoodsToShoppingCartBO.getIsMember());
return calCostBO;
......@@ -354,7 +356,11 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
activityTip.setActivityList(activityList);
shoppingCartGoodsBO.setActivityTip(activityTip);
shoppingCartGoodsBO.setDeliveryFeeZeroReason(0);
// 设置提示消息和变更标记
setToastMsgIfNotExist(shoppingCartGoodsBO, setMessageBO.getToastMsg());
if (!Objects.equals(shoppingCartGoodsBO.getChanged(),true)){
shoppingCartGoodsBO.setChanged(Objects.equals(true,setMessageBO.getChanged()));
}
return shoppingCartGoodsBO;
}
......@@ -365,6 +371,7 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
}
CalculationDiscountBO calculationDiscountBO = promotionManager.calculationDiscount(before.getGetCalculationDiscountBO(), baseRequestDTO.getManagerService().getPromotionService());
calculationDiscountBO.getResult().setValidCouponMap(before.getValidCouponMap());
calculationDiscountBO.getResult().setSpqIdToCartUuidMap(before.getSpqIdToCartUuidMap());
before.setCalculationDiscountBO(calculationDiscountBO);
return before;
......@@ -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);
......@@ -456,17 +463,13 @@ public abstract class AbstractUpdateGoodsQtyService implements UpdateGoodsQtySer
if (CollectionUtils.isNotEmpty(productStock)){
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;
import cn.freemud.demo.manager.product.ProductManager;
import cn.freemud.demo.manager.promotion.PromotionManager;
import cn.freemud.demo.service.DistributeService;
import cn.freemud.demo.utils.CommonUtils;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
......@@ -37,7 +38,7 @@ public class DistributeServiceImpl implements DistributeService {
@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();
/**
......@@ -50,8 +51,9 @@ public class DistributeServiceImpl implements DistributeService {
long totalOriginalAmount = 0L, totalAmount = 0L, totalPackageAmount = 0L;
long originalAmount = 0L, amount = 0L, packageAmount = 0L;
for (CartGoods cartGoods : cartGoodsList) {
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();
if (validCouponMap != null && validCouponMap.get(cartGoods.getSpuId()) != null){
cartGoods.setSpuId(validCouponMap.get(cartGoods.getSpuId()).getSpuId());
......@@ -62,7 +64,7 @@ public class DistributeServiceImpl implements DistributeService {
originalAmount = cartGoods.getOriginalPrice() * cartGoods.getQty();
cartGoods.setOriginalAmount(originalAmount);
this.rowRealAmount(goods, cartGoods);
this.rowRealAmount(goods, cartGoods, couponCode);
//成交价行记录
amount = cartGoods.getAmount();
totalAmount += amount;
......@@ -93,6 +95,7 @@ public class DistributeServiceImpl implements DistributeService {
activityTypeEnums.add(ActivityTypeEnum.TYPE_12);
activityTypeEnums.add(ActivityTypeEnum.TYPE_3);
activityTypeEnums.add(ActivityTypeEnum.TYPE_31);
activityTypeEnums.add(ActivityTypeEnum.TYPE_230);
GetActivityBO getActivityBO = new GetActivityBO();
getActivityBO.setActivityTypeEnums(activityTypeEnums);
......@@ -138,7 +141,7 @@ public class DistributeServiceImpl implements DistributeService {
if (CollectionUtils.isNotEmpty(discountMap.getDiscounts())) {
sum = discountMap.getDiscounts()
.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)
.sum();
cart.setAmount(cart.getAmount() + sum);
......@@ -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
.stream().filter((k) -> k.getCartGoodsUid().equals(cartGoods.getCartGoodsUid()))
......@@ -227,7 +230,14 @@ public class DistributeServiceImpl implements DistributeService {
if (find == null) return;
cartGoods.setAmount(find.getRealAmount());
//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 {
}
else {
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());
}
originPrice += choice.getFinalPrice() * choice.getQty()*cartGoods.getQty();
......@@ -274,8 +292,18 @@ public class DistributeServiceImpl implements DistributeService {
for (CartGoods.MaterialGoods mg : cartGoods.getProductMaterialList()) {
CalculationDiscountBO.CalculationDiscountResult.Goods.SmallMaterial sm = sChoices.get(mg.getSpuId());
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.setQty(mg.getQty() * cartGoods.getQty());
mg.setOriginalAmount(mg.getFinalPrice() * mg.getQty());
}
}
if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
......@@ -357,7 +385,8 @@ public class DistributeServiceImpl implements DistributeService {
CalculationDiscountBO.CalculationDiscountResult.Goods goods = discountForGift.get(k);
CalculationDiscountBO.CalculationDiscountResult.Goods.GoodsDiscount discount = goods.getDiscounts()
.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()
.get();
CartGoods cartGood = new CartGoods();
......
......@@ -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.promotion.ActivityBO;
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.enums.ActivityTypeEnum;
import cn.freemud.enums.GiftTypeEnum;
import cn.freemud.utils.WebUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
......@@ -91,6 +95,32 @@ public class MessageServiceImpl implements MessageService {
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;
}
/**
......@@ -105,40 +135,69 @@ public class MessageServiceImpl implements MessageService {
ArrayList<ActivityList> result = new ArrayList<>();
ActivityList satisfyList = new ActivityList();
CalculationDiscountBO.CalculationDiscountResult.ActivityPrompt activityPrompt = activityPrompts.get(0);
if (activityPrompt.getAlreadyDiscountAmount() == null
|| activityPrompt.getAlreadyDiscountAmount() == 0) {
messageBuilder.append("满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100))
.append("</span> 减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100))
.append("</span> ")
.append("还差 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
.append("</span> 元");
// 满足 X 元 减 Y 元 还差 Z元
satisfyList.setTipType(3);
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType()) || Objects.equals(ActivityTypeEnum.TYPE_12.getCode(), activityResponseDto.getActivityType())) {
if (activityPrompt.getAlreadyDiscountAmount() == null
|| activityPrompt.getAlreadyDiscountAmount() == 0) {
messageBuilder.append("满 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100))
.append("</span> 减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100))
.append("</span> ")
.append("还差 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
.append("</span> 元");
// 满足 X 元 减 Y 元 还差 Z元
satisfyList.setTipType(3);
satisfyList.setSatisfy(WebUtil.formatAmount(activityPrompt.getThresholdAmount() * 1.00 / 100).toString());
satisfyList.setDeduct(WebUtil.formatAmount(activityPrompt.getDiscountAmout() * 1.00 / 100).toString());
satisfyList.setMissing(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100).toString());
} else {
Long toDiscountAmout;
if (Objects.equals(ActivityTypeEnum.TYPE_11.getCode(), activityResponseDto.getActivityType())) {
toDiscountAmout = activityPrompt.getDiscountAmout() + activityPrompt.getAlreadyDiscountAmount();
} else {
toDiscountAmout = activityPrompt.getDiscountAmout();
}
//已减 X 元 再买 Y 元 减 Z 元
messageBuilder.append("已减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(activityPrompt.getAlreadyDiscountAmount() * 1.00 / 100))
.append("</span> 元 再买 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100))
.append("</span> 元减 <span style=\"color:#fa5555\">")
.append(WebUtil.formatAmount(toDiscountAmout * 1.00 / 100))
.append("</span> 元");
satisfyList.setTipType(4);
satisfyList.setDeduct(WebUtil.formatAmount(activityPrompt.getAlreadyDiscountAmount() * 1.00 / 100).toString());
satisfyList.setAgainBuy(WebUtil.formatAmount((activityPrompt.getThresholdAmount() - activityPrompt.getTotalAmount()) * 1.00 / 100).toString());
satisfyList.setAgianDeduct(WebUtil.formatAmount(toDiscountAmout * 1.00 / 100).toString());
}
}
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.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();
if (GiftTypeEnum.TYPE_1.getType().equals(activityResponseDto.getActivitySubType())) {
satisfyList.setTipType(8);
}
else {
satisfyList.setTipType(7);
}
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);
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 {
if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
if (CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
boolean productValid = false;
Integer couponType = 0;
GetCouponDetailResponseDto.Details couponActivityDetail = null;
......
......@@ -503,6 +503,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo,updateShoppingCartGoodsQtyRequestVo.getOrderType());
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, updateShoppingCartGoodsQtyRequestVo.getOrderType());
// 根据商户门店判断是否走新促销
if (grayPush(partnerId,storeId,"2")) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult = null;
discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType
......@@ -856,17 +857,17 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
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())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
}
String partnerId = shoppingCartInfoRequestVo.getPartnerId();
String storeId = shoppingCartInfoRequestVo.getShopId();
// 是否走重构
if (SDKCommonBaseContextWare.getBean(ShoppingCartNewServiceImpl.class).newShoppingCartGray(shoppingCartInfoRequestVo.getPartnerId(), shoppingCartInfoRequestVo.getShopId())){
Map requestMap = mapperFacade.map(shoppingCartInfoRequestVo, Map.class);
BaseResponse<BaseListCartGoodsVO> goodsList = null;
goodsList = shoppingCartDemoController.listCartGoods(requestMap);
BaseResponse<BaseListCartGoodsVO> goodsList = shoppingCartDemoController.listCartGoods(requestMap);
if (goodsList == null || !ResponseResult.SUCCESS.getCode().equals(goodsList.getCode())) {
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