Commit ee5be573 by chongfu.liang

Merge branch 'feature/20210305-【C端服务端】结算页查询我的优惠券信息-lcf'

parents ed72a670 d318f0ec
......@@ -553,6 +553,7 @@ public class CouponAdapter {
couponPromotionVO.setCouponCode(shoppingCartInfoRequestVo.getCouponCode());
couponPromotionVO.setOrderType(shoppingCartInfoRequestVo.getOrderType());
couponPromotionVO.setFlg(shoppingCartInfoRequestVo.getFlag());
couponPromotionVO.setUnChooseCouponCode(shoppingCartInfoRequestVo.getUnChooseCouponCode());
return couponPromotionVO;
}
}
......@@ -129,6 +129,12 @@ public class GetMemberCouponListResponseDto {
* 商品信息(商品id)
*/
private List<String> activeProducts;
/**
* 券图片地址
*/
private String logo;
}
}
......
......@@ -54,6 +54,12 @@ public class ActivityCouponBean {
* 0-商品券 1-代金券 3-折扣券
*/
private Integer couponType;
/**
* 券图片地址
*/
private String couponPic;
/**
* 日期描述
*/
......
......@@ -22,4 +22,5 @@ public class CouponPromotionVO {
private String couponCode;
private Integer flg;
private Integer orderType;
private String unChooseCouponCode;
}
......@@ -61,6 +61,11 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
private String couponCode;
/**
* 取消选择的商品券
*/
private String unChooseCouponCode;
/**
* 优惠券code列表
*/
private List<couponCode> couponCodes;
......
......@@ -80,7 +80,7 @@ public interface CouponService {
* @param cartGoods
* @return
*/
ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType, int isNew,String appId,String MenuType);
ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType, int isNew,String appId,String MenuType, String unChooseCouponCode);
/**
* 获取卡券服务商户密钥
......@@ -102,6 +102,11 @@ public interface CouponService {
CheckSpqInfoResponseDto checkSpqInfo(CheckSpqInfoRequestDto requestDto, String goodsId);
GetProductsVo getSpqProductInfo(CheckSpqInfoRequestDto requestDto);
GetProductsVo getSpqProductInfo(CheckSpqInfoRequestDto requestDto, String goodsId);
/**
* 领券
*
......
......@@ -59,7 +59,13 @@ public class CouponPromotionService implements IPromotionService {
List<CartGoods> tmpCartGoods = cartGoodsList.parallelStream().filter(k -> (k.getCartGoodsUid()
.startsWith(CommonsConstant.COUPON_PREFIX) || StringUtils.isNotBlank(k.getCouponCode()))).collect(Collectors.toList());
// 是否存在商品券
String chooseCouponCode = "";
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
if (StringUtils.isBlank(couponPromotionVO.getUnChooseCouponCode()) && hasGoodssCoupon){
chooseCouponCode = tmpCartGoods.get(0).getGoodsId().substring(CommonsConstant.COUPON_PREFIX.length());
} else {
chooseCouponCode = couponPromotionVO.getUnChooseCouponCode();
}
// 构建可用不可用优惠券
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList,
couponPromotionVO.getPartnerId(),
......@@ -69,7 +75,7 @@ public class CouponPromotionService implements IPromotionService {
hasGoodssCoupon,
couponPromotionVO.getOrderType(),
0,
shoppingCartInfoRequestVo.getAppId(),shoppingCartInfoRequestVo.getMenuType() );
shoppingCartInfoRequestVo.getAppId(),shoppingCartInfoRequestVo.getMenuType(), chooseCouponCode);
if (Objects.equals(activityClassifyCouponBean, null)) {
// 构建一个空得订单券信息
activityClassifyCouponBean = createEmptyActivityCouponBean();
......
......@@ -423,7 +423,7 @@ public class CouponServiceImpl implements CouponService {
, boolean hasGoodsCoupon
, Integer orderType
, int isNew
, String appId,String menuType) {
, String appId,String menuType, String chooseCouponCode) {
GetMemberCouponListRequestDto getMemberCouponListRequestDto = new GetMemberCouponListRequestDto(partnerId, userId);
getMemberCouponListRequestDto.setStatusFlags(Arrays.asList(CouponStatus.STATUS_0.getCode(), CouponStatus.STATUS_2.getCode()));
getMemberCouponListRequestDto.setPageNum(1);
......@@ -454,17 +454,14 @@ public class CouponServiceImpl implements CouponService {
Collectors.toMap(GetMemberCouponListResponseDto.Result.MemberCoupon::getCouponCode, a -> a, (k1, k2) -> k1));
List<String> couponCodes = Lists.newArrayList();
memberCoupons.forEach(memberCoupon -> {
if (Objects.equals(memberCoupon.getCouponType(), CouponTypeEnum.TYPE_1.getCode())
|| Objects.equals(memberCoupon.getCouponType(), CouponTypeEnum.TYPE_3.getCode())) {
// 只筛选小于结束时间得券
if (System.currentTimeMillis() < DateUtil.convert2Date(memberCoupon.getEndTime(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS).getTime()) {
couponCodes.add(memberCoupon.getCouponCode());
}
// 只筛选小于结束时间得券
if (System.currentTimeMillis() < DateUtil.convert2Date(memberCoupon.getEndTime(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS).getTime()) {
couponCodes.add(memberCoupon.getCouponCode());
}
});
List<CouponStateVo> couponStateList = buildAvailiableCoupons(cartGoods, partnerId, storeId, couponCodes, isNew,appId,menuType);
if (CollectionUtils.isNotEmpty(couponStateList)) {
return returnSuccessAvailiableCoupons(couponCode, hasGoodsCoupon, availableCouponResponseVo, usableCoupons, disableCoupons, memberCouponMap, couponStateList);
return returnSuccessAvailiableCoupons(couponCode, hasGoodsCoupon, availableCouponResponseVo, usableCoupons, disableCoupons, memberCouponMap, couponStateList, chooseCouponCode);
}
return null;
}
......@@ -518,7 +515,9 @@ public class CouponServiceImpl implements CouponService {
return couponStateList;
}
private ActivityClassifyCouponBean returnSuccessAvailiableCoupons(String couponCode, boolean hasGoodsCoupon, ActivityClassifyCouponBean availableCouponResponseVo, List<ActivityCouponBean> usableCoupons, List<ActivityCouponBean> disableCoupons, Map<String, GetMemberCouponListResponseDto.Result.MemberCoupon> memberCouponMap, List<CouponStateVo> couponStateList) {
private ActivityClassifyCouponBean returnSuccessAvailiableCoupons(String couponCode, boolean hasGoodsCoupon, ActivityClassifyCouponBean availableCouponResponseVo, List<ActivityCouponBean> usableCoupons,
List<ActivityCouponBean> disableCoupons, Map<String, GetMemberCouponListResponseDto.Result.MemberCoupon> memberCouponMap,
List<CouponStateVo> couponStateList, String chooseCouponCode) {
int disableCouponNum = 0;
int usableCouponNum = 0;
for (CouponStateVo couponStateVo : couponStateList) {
......@@ -549,7 +548,16 @@ public class CouponServiceImpl implements CouponService {
}
activityCouponBean.setThresholdDesc("满" + formatAmount((couponStateVo.getMinAmount() == null ? 0 : couponStateVo.getMinAmount()) * 1.00 / 100) + "元可用");
activityCouponBean.setActivityDesc("不与其他活动优惠同时享受。");
activityCouponBean.setUnusedReason(couponStateVo.getMessage());
if (StringUtils.isNotBlank(couponStateVo.getMessage())){
String[] split = couponStateVo.getMessage().split(",");
if(split != null && split.length > 0){
activityCouponBean.setUnusedReason(split[0]);
} else {
activityCouponBean.setUnusedReason(couponStateVo.getMessage());
}
} else {
activityCouponBean.setUnusedReason(couponStateVo.getMessage());
}
// 详情
GetMemberCouponListResponseVo.MemberCouponDetail detail = new GetMemberCouponListResponseVo.MemberCouponDetail();
detail.setActivityName(memberCoupon.getCouponName());
......@@ -584,12 +592,27 @@ public class CouponServiceImpl implements CouponService {
activityCouponBean.setSelected(YesOrNoEnum.NO.getCode());
}
if (hasGoodsCoupon) {
disableCoupons.add(activityCouponBean);
disableCouponNum = disableCouponNum + 1;
activityCouponBean.setCouponPic(memberCoupon.getLogo());
if (StringUtils.isNotBlank(chooseCouponCode) && chooseCouponCode.equals(activityCouponBean.getCouponCode())){
activityCouponBean.setSelected(YesOrNoEnum.YES.getCode());
usableCoupons.add(activityCouponBean);
usableCouponNum = usableCouponNum + 1;
} else {
if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_0.getCode()) || Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_4.getCode())){
activityCouponBean.setUnusedReason("商品券只能在点餐页");
}
disableCoupons.add(activityCouponBean);
disableCouponNum = disableCouponNum + 1;
}
} else {
if (Objects.equals(couponStateVo.getState(), CouponStateEnum.STATE_1.getCode()) || (activityCouponBean.getDailyAvailableTimes() != null && activityCouponBean.getDailyAvailableTimes() == 0)) {
disableCoupons.add(activityCouponBean);
disableCouponNum = disableCouponNum + 1;
} else if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_0.getCode()) || Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_4.getCode())) {
activityCouponBean.setCouponPic(memberCoupon.getLogo());
activityCouponBean.setUnusedReason("商品券只能在点餐页");
disableCoupons.add(activityCouponBean);
disableCouponNum = disableCouponNum + 1;
} else {
usableCoupons.add(activityCouponBean);
usableCouponNum = usableCouponNum + 1;
......@@ -941,6 +964,96 @@ public class CouponServiceImpl implements CouponService {
return dto;
}
@Override
public GetProductsVo getSpqProductInfo(CheckSpqInfoRequestDto requestDto) {
String partnerId = requestDto.getPartnerId();
String couponCode = requestDto.getCouponCode();
String storeId = requestDto.getStoreId();
//TODO 查询券详情券是否存在
GetMemberCouponRequestVo requestVo = new GetMemberCouponRequestVo();
requestVo.setPartnerId(partnerId);
requestVo.setCouponCode(couponCode);
requestVo.setStoreId(requestDto.getStoreId());
GetCouponDetailResponseDto couponDetailResponseDto = couponService.getMemberCoupon(requestVo);
LogUtil.info("couponService.getMemberCoupon", gson.toJson(requestVo), gson.toJson(couponDetailResponseDto));
if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
//券返回的商品id
List<String> skuIds = Lists.newArrayList();
String skuId = couponDetailResponseDto.getDetails().get(0).getActiveProduct().get(0).getProductIdPartner();
skuIds.add(String.valueOf(skuId));
//TODO 通过skuid查询spuid
Map<String, GetProductsVo> productsVoMap = itemService.getProducts(skuIds, partnerId, storeId , requestDto.getMenuType());
GetProductsVo productsVo = productsVoMap.get(skuId);
if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) {
return null;
}
// 校验商品可用时间
ValidateShopProductRequest request = getValidateShopProductRequest(productsVo, requestDto);
ProductResponseDTO<ValiadShopProductResponse> valiadProductResponse = storeItemClient.validateShopProduct(request);
if (null == valiadProductResponse || !Objects.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, valiadProductResponse.getErrcode())
|| valiadProductResponse.getData() == null || CollectionUtils.isEmpty(valiadProductResponse.getData().getSuccessList())) {
return null;
}
return productsVo;
}
/**
* 换购券
* 商品券支持多商品
*
* @param requestDto
* @param goodsId
* @return
*/
@Override
public GetProductsVo getSpqProductInfo(CheckSpqInfoRequestDto requestDto, String goodsId) {
log.info("checkSpqInfo****" + gson.toJson(requestDto));
String partnerId = requestDto.getPartnerId();
String couponCode = requestDto.getCouponCode();
String storeId = requestDto.getStoreId();
//TODO 查询券详情券是否存在
GetMemberCouponRequestVo requestVo = new GetMemberCouponRequestVo();
requestVo.setPartnerId(partnerId);
requestVo.setCouponCode(couponCode);
requestVo.setStoreId(requestDto.getStoreId());
GetCouponDetailResponseDto couponDetailResponseDto = couponService.getMemberCoupon(requestVo);
LogUtil.info("couponService.getMemberCoupon", gson.toJson(requestVo), gson.toJson(couponDetailResponseDto));
if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
if (CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
Integer couponType = 0;
//券返回的商品id
List<String> skuIds = Lists.newArrayList();
String skuId = goodsId;
skuIds.add(skuId);
//TODO 通过skuid查询spuid
Map<String, GetProductsVo> productsVoMap = itemService.getProducts(skuIds, partnerId, storeId, requestDto.getMenuType());
GetProductsVo productsVo = productsVoMap.get(skuId);
if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) {
return null;
}
// 校验商品可用时间
ValidateShopProductRequest request = getValidateShopProductRequest(productsVo, requestDto);
ProductResponseDTO<ValiadShopProductResponse> valiadProductResponse = storeItemClient.validateShopProduct(request);
if (null == valiadProductResponse || !Objects.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, valiadProductResponse.getErrcode())
|| valiadProductResponse.getData() == null || CollectionUtils.isEmpty(valiadProductResponse.getData().getSuccessList())) {
return null;
}
return productsVo;
}
@Autowired
private ActivityClient activityClient;
......
......@@ -611,11 +611,34 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
String menuType = shoppingCartInfoRequestVo.getMenuType();
Integer orderType = shoppingCartInfoRequestVo.getOrderType();
String receiveId = shoppingCartInfoRequestVo.getReceiveId();
String unChooseCouponCode = shoppingCartInfoRequestVo.getUnChooseCouponCode();
// 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, null, "", shoppingCartBaseService);
// 如果购物车商品不为空, 则check购物车中所有商品
if (CollectionUtils.isNotEmpty(cartGoodsList)){
// check是否反选取消商品券
if (StringUtils.isNotBlank(unChooseCouponCode)){
// 遍历该商品券选择的商品,并将商品券替换为普通商品
for (int i = cartGoodsList.size() - 1; i >= 0; i--){
CartGoods cartGoods = cartGoodsList.get(i);
if (GoodsTypeEnum.COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType()) || GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())){
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, cartGoods.getSpuId(), menuType);
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){
cartGoodsList.remove(i);
} else {
convert2CartGoods(cartGoods, productInfo);
}
}
}
}
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo.getOrderType(), "", shoppingCartInfoRequestVo.getMenuType() ,shoppingCartBaseService);
if (checkCartRequest.getShoppingCartGoodsResponseVo() != null) {
shoppingCartGoodsResponseVo.setChanged(checkCartRequest.getShoppingCartGoodsResponseVo().getChanged());
......@@ -715,6 +738,32 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
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);
}
/**
* svc 卡支付使用
*
......@@ -1003,7 +1052,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
List<CartGoods> cartGoodsList = orderItemList.stream().map(each -> convert2ShopCartGoods(each)).collect(toList());
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList, partnerId
, memberId, request.getStoreId(), "", false, request.getOrderType(), 0,"","");
, memberId, request.getStoreId(), "", false, request.getOrderType(), 0,"","", "");
if (activityClassifyCouponBean != null && CollectionUtils.isNotEmpty(activityClassifyCouponBean.getUsableCoupons())){
List<GetMemberInfoResponseVo.Coupon> coupons = activityClassifyCouponBean.getUsableCoupons().stream().map(each -> convert2MemberCoupon(each)).collect(toList());
responseData.setCoupons(coupons);
......
......@@ -58,6 +58,10 @@ public class CouponSharingService {
.startsWith(CommonsConstant.COUPON_PREFIX))).collect(Collectors.toList());
// 是否存在商品券
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
String chooseCouponCode = "";
if (StringUtils.isBlank(couponPromotionVO.getUnChooseCouponCode()) && hasGoodssCoupon){
chooseCouponCode = tmpCartGoods.get(0).getGoodsId().substring(CommonsConstant.COUPON_PREFIX.length());
}
// 构建可用不可用优惠券
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList
, couponPromotionVO.getPartnerId()
......@@ -69,6 +73,7 @@ public class CouponSharingService {
, 1
, shoppingCartInfoRequestVo.getAppId()
, shoppingCartInfoRequestVo.getMenuType()
, chooseCouponCode
);
if (Objects.equals(activityClassifyCouponBean, null)) {
// 构建一个空得订单券信息
......
......@@ -133,7 +133,7 @@ public class CouponServiceTest {
List<CartGoods> cartGoods = Lists.newArrayList();
CartGoods cartGood = new CartGoods();
cartGoods.add(cartGood);
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoods, "1864", "122424124", "1011", "88123124", true, 1, 1, "","");
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoods, "1864", "122424124", "1011", "88123124", true, 1, 1, "","", "");
assertTrue(activityClassifyCouponBean.getCouponNum() >= 1);
}
......
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