Commit 7b6df3a1 by ping.wu

Merge branches 'develop' and 'feature/20200721_麦咖啡购物车_wuping' of…

Merge branches 'develop' and 'feature/20200721_麦咖啡购物车_wuping' of http://gitlab.freemud.com/order-group-application/order-group into develop
parents d32d9423 61741286
......@@ -98,7 +98,7 @@ public class WebAspect {
throw new CommonServiceException(CommonResponseResult.USER_UNAUTHORIZED);
}
List<String> unauthorizedUrls = Arrays.asList(getNotFilterUrl(CommonRedisKeyConstant.SAAS_NOT_AUTHORIZED_URL, NOT_AUTHORIZED_KEY).split(","));
if (!unauthorizedUrls.contains(requestUrl) && StringUtils.isEmpty(userInfo.getUnionId())) {
if (!unauthorizedUrls.contains(requestUrl) && StringUtils.isEmpty(userInfo.getUnionId()) && !requestUrl.contains("MCoffee")) {
throw new CommonServiceException(CommonResponseResult.USER_UNAUTHORIZED);
}
} else {
......
......@@ -2,7 +2,9 @@ package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ResponseResult;
import cn.freemud.service.impl.mcoffee.ShoppingCartMCoffeeServiceImpl;
import cn.freemud.utils.ResponseUtil;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import io.swagger.annotations.Api;
......@@ -72,5 +74,14 @@ public class MCoffeeShoppingCartController {
return shoppingCartMCoffeeService.clear(request);
}
/**
* 获取购物车均摊详情,点 "去支付" 时调用
*/
@ApiAnnotation(logMessage = "getShoppingCartGoodsApportion")
@PostMapping(value = "/getShoppingCartGoodsApportion")
public BaseResponse getShoppingCartGoodsApportion(@Validated @LogParams @RequestBody GetShoppingCartGoodsApportionRequestVo requestVo) {
return shoppingCartMCoffeeService.getShoppingCartGoods(requestVo);
}
}
......@@ -41,7 +41,6 @@ import java.util.List;
@Service
public class AssortmentSdkService {
/**
* 调用聚合sdk获取单个商品行信息
*
......@@ -129,8 +128,7 @@ public class AssortmentSdkService {
return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CartGoods.class);
}
@Value("${shopping.cart.check.action}")
private String shoppingCartCheckAction;
/**
* 调用SDK校验购物车
......
......@@ -6,10 +6,8 @@ import cn.freemud.entities.dto.BenefitBeanDto;
import cn.freemud.entities.dto.PromotionMessageDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.vo.ActivityList;
import cn.freemud.entities.vo.ActivityTip;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.ActivityService;
import cn.freemud.utils.WebUtil;
......@@ -121,6 +119,13 @@ public class FullPromotionCalculation {
shoppingCartGoodsResponseVo.setProductsCount(allCartGoodsList.size());
}
/**
* 商品均摊
*/
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo){
}
......@@ -242,6 +247,16 @@ public class FullPromotionCalculation {
activityList.add(noSatisfy);
}
public ActivityQueryDto getActivityQueryDto(String partnerId, String storeId, String userId, String appId, Integer orderType) {
return ActivityQueryDto.builder()
.partnerId(partnerId)
.storeId(storeId)
.userId(userId)
.appId(appId)
.orderType(orderType)
.build();
}
}
package cn.freemud.service.impl.mcoffee.calculation;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.ActivityTypeEnum;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
......@@ -34,7 +39,7 @@ public class TimeSaleCalculation {
*
* @return
*/
public void TimeSaleUpdateShoppingCartGoodsDiscount(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
public void updateShoppingCartGoodsDiscount(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts())
|| !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()) || (ActivityTypeEnum.TYPE_21.getCode().equals(discount.getType()))))) {
return;
......@@ -85,6 +90,55 @@ public class TimeSaleCalculation {
}
/**
* 商品均摊
*/
public void updateShoppingCartGoodsApportion(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, ShoppingCartGoodsDto shoppingCartGoodsDto){
if (calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getDiscounts()) || !calculationDiscountResult.getDiscounts().stream().anyMatch(discount -> (ActivityTypeEnum.TYPE_2.getCode().equals(discount.getType()) || ActivityTypeEnum.TYPE_21.getCode().equals(discount.getType())))) {
return;
}
List<ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsList = calculationDiscountResult.getGoods();
if (CollectionUtils.isEmpty(goodsList)) {
return;
}
// 商品实际享受优惠的数量: key:skuId; value:实际数量
Map<String, Integer> numberMap = new HashMap<>();
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1));
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods : shoppingCartGoodsDto.getProducts()) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods;
// 特价商品没有匹配 或 加价购商品 直接跳出循环
if ((goods = goodsMap.get(cartGoods.getSkuId())) == null || ObjectUtils.equals(ActivityTypeEnum.TYPE_81.getCode(), cartGoods.getActivityType())) {
continue;
}
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = getGoodsDiscount(goods.getDiscounts(), Arrays.asList(ActivityTypeEnum.TYPE_21.getCode(), ActivityTypeEnum.TYPE_2.getCode()));
if (goodsDiscount == null) {
continue;
}
if (numberMap.get(cartGoods.getSkuId()) == null) {
numberMap.put(cartGoods.getSkuId(), goods.getActualGoodsNumber());
}
Integer actualGoodsNumber = numberMap.get(cartGoods.getSkuId());
if (actualGoodsNumber > 0) {
Long totalDiscountAmount = cartGoods.getQty() > actualGoodsNumber ? goods.getDiscountAmount() * actualGoodsNumber / goods.getActualGoodsNumber() : goods.getDiscountAmount() * cartGoods.getQty() / goods.getActualGoodsNumber();
ActivityDiscountsDto activityDiscountsDto = new ActivityDiscountsDto();
activityDiscountsDto.setActivityCode(goodsDiscount.getActivityCode());
activityDiscountsDto.setActivityName(goodsDiscount.getActivityName());
activityDiscountsDto.setActivityType(ActivityTypeEnum.TYPE_2.getCode());
activityDiscountsDto.setDiscountAmount(totalDiscountAmount.intValue());
cartGoods.getActivityDiscountsDtos().add(activityDiscountsDto);
cartGoods.setTotalDiscountAmount(cartGoods.getTotalDiscountAmount() + totalDiscountAmount.intValue());
numberMap.put(cartGoods.getSkuId(), actualGoodsNumber - cartGoods.getQty());
} else {
cartGoods.setTotalDiscountAmount(0);
}
}
}
/**
* 获取指定促销类型的GoodsDiscount
......
package cn.freemud.service.impl.mcoffee.entity;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponAvailableReq
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:10
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponAvailableReq {
//渠道id
private String providerId;
//商户号
private String merchantId;
private String city;
private String storeId;
//组织机构id列表(校验渠道限制)
private List<String> channelIdList;
//组织机构code列表(校验渠道限制)
private List<String> channelCodeList;
//券码列表
private List<String> couponCodes;
private Integer totalAmount;
//核销渠道 枚举: mocoffee_wx : 麦咖啡微信小程序 mocoffee_zfb : 麦咖啡支付宝小程序
private String redeemChannel;
//购物车商品列表
private List<CouponProductVo> productList;
private String stationId;
private String operatorId;
}
package cn.freemud.service.impl.mcoffee.entity;
import com.freemud.card.sdk.vo.coupon.CouponStateVo;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponAvailableResp
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:10
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponAvailableResp {
private Integer result;
private String msg;
private List<CouponState> couponStateList;
}
package cn.freemud.service.impl.mcoffee.entity;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponProductVo
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:14
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponProductVo {
private String keyProductCode;
private String productId;
private Integer amount;
private Integer quantity;
private String categoryCode;
}
package cn.freemud.service.impl.mcoffee.entity;
import com.freemud.card.sdk.vo.coupon.Product;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponState
* @Package cn.freemud.service.impl.mcoffee.entity
* @Description:
* @author: ping1.wu
* @date: 2020/8/5 18:53
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponState {
private String couponCode;
private Integer type;
private Integer state;
private String message;
private Integer minAmount;
private Integer amount;
private Integer priceDiscount;
private Integer originalPrice;
private Integer discount;
private String limitType;
private List<Product> productList;
private String actName;
private String actDesc;
}
......@@ -13,12 +13,14 @@
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.*;
import cn.freemud.service.impl.mcoffee.entity.CouponAvailableReq;
import cn.freemud.service.impl.mcoffee.entity.CouponAvailableResp;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
// 测试http://115.159.65.101:8002 线上http://10.51.0.37:8002
@FeignClient(name = "COUPON",url="${saas.couponclient.feign.url}")
@FeignClient(name = "COUPON",url="${saas.couponadapterclient.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface CouponClient {
......@@ -53,5 +55,11 @@ public interface CouponClient {
@PostMapping("/coupon/verification/notice")
CouponBaseResponseDto verifyNotice(VerifyNoticeRequestDto verifyNoticeRequestDto);
/**
* 麦咖啡校验券是否可用
*/
@PostMapping("/mccafe/getCouponsAvailable")
CouponAvailableResp getCouponsAvailable(CouponAvailableReq req);
}
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