Commit f9bc24fa by 刘鹏飞

Merge remote-tracking branch 'remotes/origin/feature/coco-payGift-刘鹏飞' into develop

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	order-application-service/pom.xml
#	order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
#	order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	ordercenter-sdk/pom.xml
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
parents 2a55595b a5dadfc0
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.18-SNAPSHOT</version>
<version>2.2.19-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
......@@ -38,7 +38,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>ordercenter-sdk</artifactId>
<version>1.7.3-SNAPSHOT</version>
<version>1.7.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -107,3 +107,4 @@
| 2.2.15-SNAPSHOT| 拼单 | 缪晖 | 2020-12-2 |
| 2.2.17-SNAPSHOT| 带券订单下单直接锁券 | 李小二 | 2020-12-2 |
| 2.2.18-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
| 2.2.19-SNAPSHOT| 买一赠一寄件 | 刘鹏飞 | 2020-12-11 |
\ No newline at end of file
......@@ -40,7 +40,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.18-SNAPSHOT</version>
<version>2.2.19-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -9,6 +9,8 @@ public class ResponseCodeConstant {
public final static String RESPONSE_SUCCESS_STR = "100";
public final static String COCO_RESPONSE_COUPON_ERR_STR = "49000";
public final static String RESPONSE_SUCCESS_OK = "ok";
public final static Integer RESPONSE_SUCCESS_1 = 1;
public final static String RESPONSE_SUCCESS_0_STR = "0";
......
......@@ -13,6 +13,8 @@
package cn.freemud.entities.dto.activity;
import cn.freemud.entities.vo.PayGiftCouponVo;
import cn.freemud.entities.vo.PayGiftGoodsConfigVo;
import cn.freemud.entities.vo.PayGiftMicroProgramConfigVo;
import cn.freemud.entities.vo.PayGiftWechatCouponInfoVo;
import lombok.Data;
......@@ -35,4 +37,34 @@ public class PayGiftCheckAndJoinResponseDto {
private String type;
private List<PayGiftCouponVo> coupons;
private PayGiftWechatCouponInfoVo wechatCouponInfo;
/**
* 奖励类型:1-非码券,2-微信商家券,3-弹窗奖励
*/
private String syncWechat;
/**
* 活动配图
*/
private String activityPicture;
/**
* 跳转设置(跳转类型) 0:无 5:跳转页面 10:外部小程序 15:跳转商品 20:跳转H5
*/
private String redirectType;
/**
* 跳转商品
*/
private PayGiftGoodsConfigVo goodsConfig;
/**
* 跳转小程序
*/
private PayGiftMicroProgramConfigVo microProgramConfig;
/**
* 跳转页面5和20跳转外部H5对应的路径或者URL
*/
private String redirectPage;
}
......@@ -167,7 +167,7 @@ public class CreateOrderVo {
/**
* 券码列表
*/
private List<String> couponCodes;
private List<couponCode> couponCodes;
/**
* 运费券code
......@@ -440,4 +440,21 @@ public class CreateOrderVo {
*/
private Boolean sendCoupon;
}
@Data
public final static class couponCode {
/**
* 优惠券
*/
private String couponCode;
/**
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
}
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class PayGiftGoodsConfigVo {
/**
* 跳转商品ID
*/
private String goodsId;
/**
* 跳转商品名称
*/
private String goodsName;
/**
* 跳转商品价格,单位分
*/
private Integer price;
}
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class PayGiftMicroProgramConfigVo {
/**
* 跳转小程序ID
*/
private String appId;
/**
* 跳转小程序跳转路径
*/
private String redirectUrl;
}
......@@ -371,6 +371,37 @@ public class QueryOrderResponseVo {
private List<PayGiftCouponVo> coupons;
private PayGiftWechatCouponInfoVo wechatCouponInfo;
/**
* 支付有礼奖励类型:1-非码券,2-微信商家券,3-弹窗奖励
*/
private String syncWechat;
/**
* 支付有礼活动配图
*/
private String activityPicture;
/**
* 支付有礼跳转设置(跳转类型) 0:无 5:跳转页面 10:外部小程序 15:跳转商品 20:跳转H5
*/
private String redirectType;
/**
* 支付有礼跳转商品
*/
private PayGiftGoodsConfigVo goodsConfig;
/**
* 支付有礼跳转小程序
*/
private PayGiftMicroProgramConfigVo microProgramConfig;
/**
* 支付有礼跳转页面5和20跳转外部H5对应的路径或者URL
*/
private String redirectPage;
/**
* 收件人省份
*/
......
......@@ -207,6 +207,11 @@ public class ShoppingCartInfoRequestVo {
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
}
......@@ -227,6 +227,12 @@ public enum ResponseResult {
DELIVERY_INFO_NOT_DELIVERY("60001", "当前地址不可配送"),
DELIVERY_INFO_ERROR("60002","配送地址不正确"),
DELIVERY_CREATE_ERROR("60003","运单不足,配送失败"),
/**
* coco券验证失败
*/
COCO_COUPON_VALIDATOR_FAIL("70000", "优惠券验证错误"),
;
......
......@@ -579,7 +579,7 @@ public class CheckOrder {
// 校验couponCode
GetCouponDetailResponseDto getCouponDetailResponseDto = couponService.getMemberCoupon(GetMemberCouponRequestVo.builder()
.partnerId(createOrderVo.getPartnerId())
.couponCode(couponCode).build());
.couponCode(couponCode.getCouponCode()).build());
if (Objects.equals(getCouponDetailResponseDto, null) || CollectionUtils.isEmpty(getCouponDetailResponseDto.getDetails())
|| getCouponDetailResponseDto.getDetails().get(0).getActive() == null
|| getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode() == null) {
......@@ -594,8 +594,9 @@ public class CheckOrder {
}
String activeCode = getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode();
ShoppingCartInfoRequestVo.couponCode coupon = new ShoppingCartInfoRequestVo.couponCode();
coupon.setCouponCode(couponCode);
coupon.setCouponCode(couponCode.getCouponCode());
coupon.setActivityCode(activeCode);
coupon.setIndex(couponCode.getIndex());
couponCodes.add(coupon);
});
......@@ -620,6 +621,12 @@ public class CheckOrder {
} else {
apportionResponse = shoppingCartClient.getShoppingCartGoodsApportionNew(requestDto);
}
// 这个是专门的给coco使用的验证券的逻辑
if (ObjectUtils.equals(ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR, apportionResponse.getCode())) {
throw new ServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,apportionResponse.getMessage());
}
if (!ObjectUtils.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, apportionResponse.getCode())) {
ResponseResult responseResult = ResponseResult.getResponseResult(apportionResponse.getCode());
throw new ServiceException(responseResult != null ? responseResult : ResponseResult.SHOPPING_CART_GETINFO_ERROR);
......
......@@ -1281,6 +1281,14 @@ public class OrderServiceImpl implements Orderservice {
queryOrderResponseVo.setActivityName(payGiftResponse.getActivityName());
queryOrderResponseVo.setCoupons(payGiftResponse.getCoupons());
queryOrderResponseVo.setWechatCouponInfo(payGiftResponse.getWechatCouponInfo());
queryOrderResponseVo.setActivitySendType(payGiftResponse.getSendType());
queryOrderResponseVo.setSyncWechat(payGiftResponse.getSyncWechat());
queryOrderResponseVo.setActivityPicture(payGiftResponse.getActivityPicture());
queryOrderResponseVo.setRedirectType(payGiftResponse.getRedirectType());
queryOrderResponseVo.setGoodsConfig(payGiftResponse.getGoodsConfig());
queryOrderResponseVo.setMicroProgramConfig(payGiftResponse.getMicroProgramConfig());
queryOrderResponseVo.setRedirectPage(payGiftResponse.getRedirectPage());
queryOrderResponseVo.setActivitySendType(payGiftResponse.getSendType());
}
}
......
......@@ -120,10 +120,7 @@ public class CocoOrderRelationServiceImpl implements OrderRelationService {
if(null != masterProducts && !masterProducts.isEmpty()){
masterProducts.forEach(product -> {
Integer giftQty = product.getQty();
if(giftQty == 0){
return;
}
Integer giftQty = giftMap.get(product.getCid()) == null ? 0 : giftMap.get(product.getCid());
product.setQty(product.getQty() + giftQty);
});
}
......
......@@ -8,7 +8,7 @@
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<version>1.7.3-SNAPSHOT</version>
<version>1.7.4-SNAPSHOT</version>
<artifactId>ordercenter-sdk</artifactId>
<dependencies>
......
......@@ -44,4 +44,5 @@
| 1.7.0-SNAPSHOT | 买一赠一寄件 | 刘鹏飞 | 2020-12-1 |
| 1.7.1-SNAPSHOT | 拼单 | 缪晖 | 2020-12-02 |
| 1.7.2-SNAPSHOT | coco订单详情赠品合并 | 刘鹏飞 | 2020-12-3 |
| 1.7.3-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
\ No newline at end of file
| 1.7.3-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
| 1.7.4-SNAPSHOT| 买一赠一寄件 | 刘鹏飞 | 2020-12-11 |
\ No newline at end of file
......@@ -31,5 +31,5 @@ public class OrderSendCouponReq {
/**
* 买一赠一寄件信息
*/
private List<OrderSendCouponUpdateReq> chooseGoods;
private List<OrderSendCouponUpdateReq> orderSendCouponRespList;
}
......@@ -9,6 +9,9 @@ public class ResponseCodeConstant {
public final static String RESPONSE_SUCCESS_STR = "100";
// coco券校验异常的错误
public final static String COCO_RESPONSE_COUPON_ERR_STR = "700";
public final static String RESPONSE_SUCCESS_OK = "ok";
public final static Integer RESPONSE_SUCCESS_1 = 1;
public final static String RESPONSE_SUCCESS_0_STR = "0";
......
......@@ -89,6 +89,11 @@ public class CalculationSharingDiscountRequestDto {
* 活动号
*/
private String activityCode;
/**
* 下标
*/
private Integer useIndex;
}
@Data
......
......@@ -217,6 +217,11 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
}
......@@ -146,6 +146,7 @@ public enum ResponseResult {
COUPON_SHOP_NOTSUPPORT("46010", "优惠券在当前门店不可用"),
COUPON_ORDER_WAY_ERROR("46011", "您选择得优惠券不适用该点餐方式"),
COUPON_VERIFICATION_FAIL("46012", "优惠券核销失败"),
/**
* 加价购商品
*/
......@@ -176,7 +177,13 @@ public enum ResponseResult {
*/
WEICHAT_SHOP_NOTSUPPORT("48001", "当前门店不可用"),
WEICHAT_NOT_PRODUCTCARD("48002", "不是商品券不用加入购物车"),
WEICHAT_PRODUCT_NOEXIST("48003", "商品不存在");
WEICHAT_PRODUCT_NOEXIST("48003", "商品不存在"),
/**
* coco验证券错误
*/
COCO_COUPON_VALIDATOR_FAIL("49000", "优惠券验证错误")
;
private String code;
......
......@@ -51,6 +51,7 @@ import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerStoreDeliveryConfig;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformPartnerStoreDeliveryConfigManager;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest;
......@@ -345,7 +346,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, partnerId
, null);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,partnerId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,null,partnerId);
}
else {
// 获取优惠信息
......@@ -469,7 +470,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, partnerId
, null);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,partnerId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,null,partnerId);
}
else {
// 获取优惠信息
......@@ -587,6 +588,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
coupon.setActivityCode(activityCode);
coupons.add(coupon);
}
buildCoupons(coupons,shoppingCartInfoRequestVo.getCouponCodes());
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList = shoppingCartInfoRequestVo.getSendGoods();
List<ShoppingCartInfoRequestVo.SendGoods> sendGoods = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sendGoodsList)) {
......@@ -624,7 +628,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, partnerId
,shoppingCartInfoRequestVo.getFlag());
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,calculationSharingDiscountResult,partnerId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,calculationSharingDiscountResult,shoppingCartInfoRequestVo.getFlag(),partnerId);
}
else {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
......@@ -817,6 +821,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
coupon.setActivityCode(activityCode);
coupons.add(coupon);
}
// 当couponCodes不为空时,需参与价格计算,同时排除单券入参
buildCoupons(coupons,shoppingCartInfoRequestVo.getCouponCodes());
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType
, partnerId
, storeId
......@@ -2131,10 +2138,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
*/
private void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
Integer flag,
String partnerId) {
ShoppingCartRelationService shoppingCartRelationService = shoppingCartRelationFactory.getBuildShoppingCartGoodsResponseService(partnerId);
shoppingCartRelationService.buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult);
shoppingCartRelationService.buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,flag);
}
......@@ -2178,4 +2186,37 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return false;
}
}
private List<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> buildCoupons(List<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> oldCoupons, List<ShoppingCartInfoRequestVo.couponCode> coupons){
ApiLog.info("批量使用优惠券前,oldCoupons,coupons",oldCoupons,coupons);
for(int i = 0 ; i < oldCoupons.size() ; i++){
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon oldCoupon = oldCoupons.get(i);
oldCoupon.setUseIndex(i);
}
List<String> codes = oldCoupons.stream().map(CalculationSharingDiscountRequestDto.CalculationDiscountCoupon::getCode).collect(toList());
if (coupons != null) {
for(int x = 0 ; x < coupons.size() ; x++){
ShoppingCartInfoRequestVo.couponCode cp = coupons.get(x);
if(codes.contains(cp.getCouponCode())){
continue;
}
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(cp.getCouponCode());
coupon.setActivityCode(cp.getActivityCode());
coupon.setUseIndex(cp.getIndex() == null ? x + oldCoupons.size(): cp.getIndex() + oldCoupons.size());
oldCoupons.add(coupon);
}
}
ApiLog.info("批量使用优惠券后,oldCoupons,coupons",oldCoupons,coupons);
return oldCoupons;
}
}
......@@ -198,6 +198,11 @@ public class CalculationSharingDiscountService {
return result;
}
// 这个是专门给coco使用的券验证错误的异常,message要抛出去
if(sharingDiscountResponseDto != null && StringUtils.equals(sharingDiscountResponseDto.getStatusCode(), ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR)){
throw new ServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,sharingDiscountResponseDto.getMsg());
}
// 支付宝华莱士紧急修改代码,当促销返回103错误码时,需要报券不适用于该门店,且清空购物车
//throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
return null;
......
......@@ -13,6 +13,9 @@ import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.ActivityService;
import cn.freemud.utils.WebUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.card.sdk.log.ApiLog;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -45,7 +48,48 @@ public class FullSharingService {
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, ActivityQueryDto activityQueryDto) {
List<ActivityTypeEnum> activityTypeEnums = new LinkedList<>();
/**
* 每满减 TYPE_11\ 阶梯满减 TYPE_12
*/
activityTypeEnums.add(ActivityTypeEnum.TYPE_11);
activityTypeEnums.add(ActivityTypeEnum.TYPE_12);
activityTypeEnums.add(ActivityTypeEnum.TYPE_3);
activityTypeEnums.add(ActivityTypeEnum.TYPE_31);
if (discountResult == null || CollectionUtils.isEmpty(discountResult.getGoods())) {
/**
* 调用促销统一活动查询,过滤出参与的满减(目前只有每满减和阶梯满减)
*/
ActivityQueryResponseDto activityQueryResponseDto = activityService.queryActivityByType(activityQueryDto, activityTypeEnums, null);
if (null==activityQueryResponseDto || CollectionUtils.isEmpty(activityQueryResponseDto.getResult())) {
return;
}
Optional<ActivityResponseDto> first = activityQueryResponseDto.getResult().stream().findFirst();
PromotionMessageDto promotionMessageDto = new PromotionMessageDto();
ActivityResponseDto activityResponseDto = first.get();
promotionMessageDto.setActivityId(activityResponseDto.getActivityCode());
promotionMessageDto.setActivityName(activityResponseDto.getActivityName());
promotionMessageDto.setActivityType(activityResponseDto.getActivityType());
promotionMessageDto.setPromotionAmount(0L);
StringBuilder messageBuilder = new StringBuilder();
ArrayList<ActivityList> activityList = new ArrayList<>();
List<BenefitBeanDto> benefitBeanDtos = activityResponseDto.getBenefits();
BenefitBeanDto benefitBeanDto = benefitBeanDtos.get(0);
//调用没有加入购物车的提示语的方法
setMessageNotInShoppingCart(messageBuilder, activityResponseDto, benefitBeanDtos, benefitBeanDto, activityList);
promotionMessageDto.setPromotionMessage(messageBuilder.toString());
ActivityTip activityTip = new ActivityTip();
activityTip.setActivityCode(promotionMessageDto.getActivityId());
activityTip.setActivityType(promotionMessageDto.getActivityType());
activityTip.setActivityName(promotionMessageDto.getPromotionMessage());
activityTip.setActivityList(activityList);
shoppingCartGoodsResponseVo.setActivityTip(activityTip);
return;
}
......@@ -65,14 +109,7 @@ public class FullSharingService {
}
shoppingCartGoodsResponseVo.setActivityTip(new ActivityTip());
List<ActivityTypeEnum> activityTypeEnums = new LinkedList<>();
/**
* 每满减 TYPE_11\ 阶梯满减 TYPE_12
*/
activityTypeEnums.add(ActivityTypeEnum.TYPE_11);
activityTypeEnums.add(ActivityTypeEnum.TYPE_12);
activityTypeEnums.add(ActivityTypeEnum.TYPE_3);
activityTypeEnums.add(ActivityTypeEnum.TYPE_31);
List<Integer> typeEnums = activityTypeEnums.stream().map(ActivityTypeEnum::getCode).collect(Collectors.toList());
/**
* 还原满减折扣到行记录上
......
......@@ -147,7 +147,7 @@ public class GiftSharingService {
, List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtoList
, ActivityQueryDto activityQueryDto
, String menuType) {
if (CollectionUtils.isEmpty(discountResult.getGoods())) {
if (discountResult == null || CollectionUtils.isEmpty(discountResult.getGoods())) {
return;
}
List<ProductBeanDTO> beanDTOList = this.drawGiftInfo(discountResult, activityQueryDto, menuType);
......
......@@ -21,7 +21,8 @@ public interface ShoppingCartRelationService {
* 获取购物车查询出参构建实现
*/
void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult);
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
Integer flag);
}
......@@ -14,13 +14,19 @@
package cn.freemud.service.shoppingCart.impl;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.shoppingCart.ShoppingCartRelationService;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Service("cocoShoppingCartRelationService")
public class CocoShoppingCartRelationServiceImpl implements ShoppingCartRelationService {
......@@ -28,7 +34,8 @@ public class CocoShoppingCartRelationServiceImpl implements ShoppingCartRelation
@Override
public void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
Integer flag) {
if(discountResult != null){
......@@ -37,16 +44,169 @@ public class CocoShoppingCartRelationServiceImpl implements ShoppingCartRelation
// coco返回的活动中剔除集点活动
if(discountResult.getDiscounts() != null && !discountResult.getDiscounts().isEmpty()){
discountResult.getDiscounts().forEach(discount -> {
if(ActivityTypeEnum.TYPE_221.equals(discount.getType())){
if(ActivityTypeEnum.TYPE_221.getCode().equals(discount.getType())){
return;
}
discounts.add(discount);
});
}
// 促销的活动信息和商品优惠信息给前端做展示、打标签用
shoppingCartGoodsResponseVo.setDiscounts(discounts);
shoppingCartGoodsResponseVo.setGoods(discountResult.getGoods());
List<CartGoods> products = shoppingCartGoodsResponseVo.getProducts();
List<String> gifeProductIds = new ArrayList<>();
if(products != null && !products.isEmpty()){
// 获取赠品的商品id
gifeProductIds = products.stream().filter(product -> Objects.equals(product.getActivityType(),ActivityTypeEnum.TYPE_63.getCode())).map(CartGoods::getGoodsId).collect(Collectors.toList());
}
Map<String,CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> goodsDiscountsMap = new HashMap<>();
Map<String,CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> halfDiscountsMap = new HashMap<>();
// 商品优惠信息
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> goodsDiscounts = discountResult.getGoods();
if(goodsDiscounts == null || goodsDiscounts.isEmpty()){
return;
}
goodsDiscountsMap = goodsDiscounts.stream().collect(Collectors.toMap(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, g -> g,(k1,k2)->k1));
goodsDiscounts.forEach(goodsDiscount ->{
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount> oneGoodsDiscounts = goodsDiscount.getDiscounts();
if(oneGoodsDiscounts == null || oneGoodsDiscounts.isEmpty()){
return;
}
oneGoodsDiscounts.forEach(discount -> {
if(Objects.equals(discount.getType(),ActivityTypeEnum.TYPE_53.getCode())){
halfDiscountsMap.put(goodsDiscount.getCartGoodsUid() + "-" + discount.getGoodsId(),discount);
}
});
});
List<CartGoods> newProducts = new ArrayList<>();
if(!Objects.equals(flag,1)){// 非结算页
if(products == null || products.isEmpty()){
return;
}
List<CartGoods> halfProduct = new ArrayList<>();
for(int x = 0 ; x < products.size() ; x ++){
CartGoods product = products.get(x);
// 要添加的半价行数量,该字段从促销返回
Integer num = 0;
// 商品优惠的金额
Long discountAmount = 0L;
if(halfDiscountsMap.get(product.getCartGoodsUid() + "-" + product.getGoodsId()) != null){
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount discount = halfDiscountsMap.get(product.getCartGoodsUid() + "-" + product.getGoodsId());
if(discount == null){
return;
}
num = discount.getActualGoodsNumber();
for(int i = 0 ; i < num ; i++){
// 第二件优惠活动,在点餐页需要给优惠商品单独显示一行
// 复制商品加到购物车
discountAmount = discount.getDiscount();
Long newPrice = product.getOriginalPrice() - discountAmount;
// 构建半价行
CartGoods cartGoods = buildNewLine(product,ActivityTypeEnum.TYPE_53.getCode(),1,newPrice);
halfProduct.add(cartGoods);
}
}
Integer newQty = product.getQty() - num;
// 数量减去购物车行之后如果为0就不加入购物车
// 主商品行要数量,价格
if(!Objects.equals(newQty,0)){
product.setAmount(product.getAmount() - discountAmount * num);
product.setOriginalAmount(product.getOriginalAmount() - product.getOriginalPrice() * num);
product.setQty(newQty);
// 商品的现单价使用促销返回的现单价
// 但是要排除赠品行、半价行
if(!ObjectUtils.equals(product.getActivityType(),ActivityTypeEnum.TYPE_63.getCode()) && !ObjectUtils.equals(product.getActivityType(),ActivityTypeEnum.TYPE_53.getCode())){
product.setFinalPrice(goodsDiscountsMap.get(product.getCartGoodsUid()).getNowPrice());
}
// num代表拆出来的半价行数量,gifeProductIds代表赠品
// 只要符合条件就需要设置为空
// 因为前端指挥在半价行、赠品行上打标
// 前端是从商品活动信息中查找活动,在商品列表中找商品
if((gifeProductIds.contains(product.getGoodsId()) && product.getActivityType() == null) || !Objects.equals(num,0)){
product.setGoodsId(null);
}
// num代表拆出来的半价行数量
// 所以只要不等于0就需要把ActivityType设置为空
// 因为前端用这个判断是否能加减
if(!Objects.equals(num,0)){
product.setActivityType(null);
}
newProducts.add(product);
}
}
// 半价商品加到购物车
newProducts.addAll(halfProduct);
shoppingCartGoodsResponseVo.setProducts(newProducts);
}
}
}
public CartGoods buildNewLine(CartGoods cgs,Integer activityType,Integer qty,Long newPrice){
CartGoods newCartGoods = new CartGoods();
// 购物车的行设置和原来的行一致,便于前端在更新商品数量的时候。能够根据购物车行聚合商品数量
// 因为半价行是从主行中拆出来的
newCartGoods.setCartGoodsUid(cgs.getCartGoodsUid());
// 这个地方不要放置商品id,因为半价行的商品不打活动标签
// 前端会根据这个活动检索
newCartGoods.setGoodsType(cgs.getGoodsType());
newCartGoods.setGoodsId(cgs.getGoodsId());
newCartGoods.setSpuId(cgs.getSpuId());
newCartGoods.setSkuId(cgs.getSkuId());
newCartGoods.setSpecProductId(cgs.getSpecProductId());
// 价格只用一个商品的价格
newCartGoods.setOriginalPrice(cgs.getOriginalPrice());
// 价格只用一个商品的价格
newCartGoods.setPackPrice(cgs.getPackPrice());
// 价格只用一个商品的价格
newCartGoods.setOriginalAmount(cgs.getOriginalPrice());
// 价格只用一个商品的价格
newCartGoods.setFinalPrice(newPrice);
// 价格只用一个商品的价格
newCartGoods.setAmount(newPrice);
newCartGoods.setName(cgs.getName());
newCartGoods.setSpuName(cgs.getSpuName());
newCartGoods.setSubName(cgs.getSubName());
newCartGoods.setNodeId(cgs.getNodeId());
newCartGoods.setCategoryName(cgs.getCategoryName());
List<CartGoods.CartGoodsExtra> extra = Lists.newArrayList();
List<CartGoods.CartGoodsExtra> cartGoodsExtras = cgs.getExtra();
if (CollectionUtils.isNotEmpty(cartGoodsExtras)) {
cartGoodsExtras.forEach(cartGoodsExtra -> {
CartGoods.CartGoodsExtra goodsExtra = new CartGoods.CartGoodsExtra();
goodsExtra.setAttributeId(cartGoodsExtra.getAttributeId());
goodsExtra.setAttributeName(cartGoodsExtra.getAttributeName());
extra.add(goodsExtra);
});
}
newCartGoods.setExtra(extra);
newCartGoods.setPic(cgs.getPic());
newCartGoods.setCreateTimeMili(cgs.getCreateTimeMili());
newCartGoods.setSkuName(cgs.getSkuName());
newCartGoods.setSkuName(cgs.getSkuName());
newCartGoods.setClassificationId(cgs.getClassificationId());
newCartGoods.setClassificationName(cgs.getClassificationName());
newCartGoods.setActivityType(activityType);
newCartGoods.setQty(qty);
return newCartGoods;
}
}
......@@ -22,7 +22,8 @@ public class PlatformShoppingCartRelationServiceImpl implements ShoppingCartRela
@Override
public void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
Integer flag) {
}
}
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