Commit 1d43b0e1 by 徐康

麦咖啡多条优惠购买和使用

parent d9e48f75
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.31-SNAPSHOT</version>
<version>2.2.32-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
......
......@@ -46,7 +46,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.31-SNAPSHOT</version>
<version>2.2.32-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -172,6 +172,15 @@ public class OrderAdapter {
List<ActivityDiscountsDto> activityDiscountsDtos = shoppingCartGoodsDto.getActivityDiscountsDtos();
List<CreateOrderProductRequest> products = new ArrayList<>();
//随单购商品
if(null != shoppingCartGoodsDto.getPayCardFee() && 0l != shoppingCartGoodsDto.getPayCardFee() && StringUtils.isNotBlank(createOrderVo.getCardKeyCode())) {
products.add(getMcCafeWithOrderVirtualProduct(shoppingCartGoodsDto, createOrderVo));
}
// Set<String> withOrderBuyCouponCodeSet = new HashSet<>();
// withOrderBuyCouponCodeSet.add(withOrderBuyCouponCode);
// cartGoodsDetailDtos.stream().filter(o -> ProductTypeEnum.getVirtualProductType().contains(o.getProductType())).map(o -> withOrderBuyCouponCodeSet.add(o.getMonthCardInfo().getCardCode()));
// 根据购物车商品信息获取优惠信息
int orderAccountIndex = 0;
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto : cartGoodsDetailDtos) {
......@@ -196,34 +205,6 @@ public class OrderAdapter {
}
}
}
if(null != shoppingCartGoodsDto.getPayCardFee() && 0l != shoppingCartGoodsDto.getPayCardFee() && StringUtils.isNotBlank(createOrderVo.getCardKeyCode())) {
CreateOrderProductRequest createOrderProductDemoDto = new CreateOrderProductRequest();
createOrderProductDemoDto.setProductId(mccafeMonthCardGoodsId);
createOrderProductDemoDto.setProductName("啡常月享卡");
createOrderProductDemoDto.setSpecification(mccafeMonthCardGoodsId);
createOrderProductDemoDto.setSpecificationName("啡常月享卡");
createOrderProductDemoDto.setPrice(shoppingCartGoodsDto.getPayCardFee());
createOrderProductDemoDto.setSalePrice(shoppingCartGoodsDto.getPayCardFee());
createOrderProductDemoDto.setTotalDiscountAmount(0l);
createOrderProductDemoDto.setNumber(1);
createOrderProductDemoDto.setProductType(ProductTypeEnum.WITH_ORDER_VIRTUAL_PRODUCT.getCode());
createOrderProductDemoDto.setParentProductId("0");
createOrderProductDemoDto.setIsFixedProduct(null);
createOrderProductDemoDto.setCustomerCode(createOrderVo.getCardKeyCode());
createOrderProductDemoDto.setProductCode(createOrderVo.getCardKeyCode());
createOrderProductDemoDto.setHasStockProudct(false);
createOrderProductDemoDto.setWeight(0d);
createOrderProductDemoDto.setStapleFood(0);
createOrderProductDemoDto.setTax(0d);
createOrderProductDemoDto.setTaxId("");
createOrderProductDemoDto.setCardId(withOrderBuyCardId);
createOrderProductDemoDto.setCardCode(withOrderBuyCouponCode);
if(ProductTypeEnum.TABLEWARE_PRODUCT.getCode().equals(products.get(products.size()-1).getProductType())) {
products.add(products.size()-1, createOrderProductDemoDto);
} else {
products.add(createOrderProductDemoDto);
}
}
createOrderDto.setProducts(products);
boolean hasDeliveryMonthCard = false;
......@@ -2551,6 +2532,31 @@ public class OrderAdapter {
return createOrderProductDemoDto;
}
public CreateOrderProductRequest getMcCafeWithOrderVirtualProduct(ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo createOrderVo) {
CreateOrderProductRequest createOrderProductDemoDto = new CreateOrderProductRequest();
createOrderProductDemoDto.setProductId(mccafeMonthCardGoodsId);
createOrderProductDemoDto.setProductName("啡常月享卡");
createOrderProductDemoDto.setSpecification(mccafeMonthCardGoodsId);
createOrderProductDemoDto.setSpecificationName("啡常月享卡");
createOrderProductDemoDto.setPrice(shoppingCartGoodsDto.getPayCardFee());
createOrderProductDemoDto.setSalePrice(shoppingCartGoodsDto.getPayCardFee());
createOrderProductDemoDto.setTotalDiscountAmount(0l);
createOrderProductDemoDto.setNumber(1);
createOrderProductDemoDto.setProductType(ProductTypeEnum.WITH_ORDER_VIRTUAL_PRODUCT.getCode());
createOrderProductDemoDto.setParentProductId("0");
createOrderProductDemoDto.setIsFixedProduct(null);
createOrderProductDemoDto.setCustomerCode(createOrderVo.getCardKeyCode());
createOrderProductDemoDto.setProductCode(createOrderVo.getCardKeyCode());
createOrderProductDemoDto.setHasStockProudct(false);
createOrderProductDemoDto.setWeight(0d);
createOrderProductDemoDto.setStapleFood(0);
createOrderProductDemoDto.setTax(0d);
createOrderProductDemoDto.setTaxId("");
createOrderProductDemoDto.setCardId(withOrderBuyCardId);
createOrderProductDemoDto.setCardCode(withOrderBuyCouponCode);
return createOrderProductDemoDto;
}
/**
* 将促销的枚举 ActivityTypeEnum 和orderAccountType 关联映射
*/
......
......@@ -486,7 +486,7 @@ public class CheckMCCafeOrder {
if("remove".equals(createOrderVo.getCouponCode())) {
createOrderVo.setCouponCode("");
}
if("remove".equals(createOrderVo.getFreightCouponCode())) {
if("recardNomove".equals(createOrderVo.getFreightCouponCode())) {
createOrderVo.setFreightCouponCode("");
}
if (StringUtils.isNotBlank(createOrderVo.getCouponCode())) {
......
......@@ -119,6 +119,7 @@ import com.google.common.collect.Maps;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -162,7 +163,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private FMAssistantCloudPrintClient fmAssistantCloudPrintClient;
@Autowired
private MessageCenterClient messageNoticeClient;
private OrderServiceImpl orderService;
@Autowired
private PromotionActivityClient promotionActivityClient;
@Autowired
......@@ -844,7 +845,9 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
// }
//麦咖啡随单购咖啡月卡
withOrderBuyCoupon(orderBean,orderExtInfoDto.getThirdPartyMemberId());
if(withOrderBuyCoupon(orderBean, orderExtInfoDto.getThirdPartyMemberId())) {
orderBean = getOrderBean(confirmOrderDto);
}
// 如果是到店,则冻结优惠券
// 如果是外卖,则核销优惠券
......@@ -1005,6 +1008,12 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
return sendPaySuccessNoticeMessage();
}
private QueryOrdersResponseDto.DataBean.OrderBean getOrderBean(ConfirmOrderDto confirmOrderDto) {
Map<String, QueryOrdersResponseDto.DataBean.OrderBean> orderBeans = orderService.getOrderBeanByOrderId(confirmOrderDto.getOrderId());
log.info("从缓存重新获取数据:", confirmOrderDto.getOrderId(), orderBeans);
return orderBeans.get(OrderBeanType.SAASORDER.getCode());
}
/**
* 创建配送单一车 -> 更新订单为异常单
*
......@@ -1526,21 +1535,22 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
* 随单购月卡调会员发券与更新订单使用的优惠券与买的优惠券
* @param orderBean
*/
private void withOrderBuyCoupon(QueryOrdersResponseDto.DataBean.OrderBean orderBean,String thirdPartyMemberId){
private boolean withOrderBuyCoupon(QueryOrdersResponseDto.DataBean.OrderBean orderBean,String thirdPartyMemberId){
try{
List<String> cardIds = new ArrayList<>();
List<String> defaultCardCodes = new ArrayList<>();
for (OrderBean.ProductBean productBean : orderBean.getProductList()){
if(ProductTypeEnum.VIRTUAL_PRODUCT.getCode().equals(productBean.getProductType())
|| ProductTypeEnum.WITH_ORDER_VIRTUAL_PRODUCT.getCode().equals(productBean.getProductType())) {
if(ProductTypeEnum.getVirtualProductType().contains(productBean.getProductType())) {
OrderProductAddInfoDto extInfo = JSON.parseObject(productBean.getExtInfo(), OrderProductAddInfoDto.class);
cardIds.add(extInfo.getCardId());
for(int i=0;i<productBean.getNumber();i++) {
cardIds.add(extInfo.getCardId());
}
defaultCardCodes.add(extInfo.getCardCode());
}
}
if(CollectionUtils.isEmpty(cardIds)){
return;
return false;
}
SendCouponForqujiaRequestDto request = new SendCouponForqujiaRequestDto();
......@@ -1550,54 +1560,72 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
SendCouponForqujiaDtoResponseDto responseDto = customerExtendClient.sendCouponForqujia(request);
if(!Objects.equals(responseDto.getCode(), ResponseResult.SUCCESS.getCode())){
LogUtil.error("sendCouponForqujia", JSON.toJSONString(request), JSON.toJSONString(responseDto));
return;
return false;
}
if(responseDto.getData() == null || CollectionUtils.isEmpty(responseDto.getData().getCard_list())){
return;
return false;
}
//目前只有月享卡,所以只发一张
SendCouponForqujiaDtoResponseDto.Card card = responseDto.getData().getCard_list().get(0);
List<SendCouponForqujiaDtoResponseDto.Card> cardList = responseDto.getData().getCard_list();
Map<String, List<SendCouponForqujiaDtoResponseDto.Card>> cardMap = new HashMap<>();
UpdateCouponCodeReq req = new UpdateCouponCodeReq();
req.setOrderCode(orderBean.getOid());
req.setCouponReceiveInfoList(new ArrayList<>());
req.setCouponUpdateInfoList(new ArrayList<>());
log.info("准备开始生成参数:", orderBean);
for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean productBean : orderBean.getProductList()) {
if(ProductTypeEnum.VIRTUAL_PRODUCT.getCode().equals(productBean.getProductType())
|| ProductTypeEnum.WITH_ORDER_VIRTUAL_PRODUCT.getCode().equals(productBean.getProductType())) {
if(ProductTypeEnum.getVirtualProductType().contains(productBean.getProductType())) {
UpdateCouponCodeReq.CouponReceiveInfo couponReceiveInfo = new UpdateCouponCodeReq.CouponReceiveInfo();
couponReceiveInfo.setGoodsId(productBean.getSpecification());
// OrderProductAddInfoDto extInfo = JSON.parseObject(productBean.getExtInfo(), OrderProductAddInfoDto.class);
//暂时写死为发的唯一的券
couponReceiveInfo.setCouponCode(card.getCard_code());
couponReceiveInfo.setProductSeq(productBean.getSequence());
OrderProductAddInfoDto extInfo = JSON.parseObject(productBean.getExtInfo(), OrderProductAddInfoDto.class);
String cardCodeStr = "";
for(int j=0;j<productBean.getNumber();j++) {
for(int i=0;i<cardList.size();i++) {
if(cardList.get(i).getCard_id().equals(extInfo.getCardId())) {
cardCodeStr += cardList.get(i).getCard_code()+"/";
if(CollectionUtils.isEmpty(cardMap.get(extInfo.getCardCode()))) {
cardMap.put(extInfo.getCardCode(), Arrays.asList(cardList.get(i)));
} else {
cardMap.get(extInfo.getCardCode()).add(cardList.get(i));
}
cardList.remove(i);
break;
}
}
}
couponReceiveInfo.setCouponCode(cardCodeStr.substring(0, cardCodeStr.length()-1));
req.getCouponReceiveInfoList().add(couponReceiveInfo);
} else if(CollectionUtils.isNotEmpty(productBean.getDiscountList())) {
for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean.ProductDiscount discount : productBean.getDiscountList()) {
if(defaultCardCodes.contains(discount.getDiscountId())) {
UpdateCouponCodeReq.CouponUpdateInfo couponUpdateInfo = new UpdateCouponCodeReq.CouponUpdateInfo();
//暂时写死为唯一发的券
couponUpdateInfo.setCouponCode(card.getCard_code());
couponUpdateInfo.setProductSeq(productBean.getSequence());
List<SendCouponForqujiaDtoResponseDto.Card> list = cardMap.get(discount.getDiscountId());
if(CollectionUtils.isEmpty(list)) {
continue;
}
//暂时默认使用第一个,后续改成查询有效的那个再使用
couponUpdateInfo.setCouponCode(list.get(0).getCard_code());
list.remove(0);
couponUpdateInfo.setOldCouponCode(discount.getDiscountId());
req.getCouponUpdateInfoList().add(couponUpdateInfo);
discount.setDiscountId(card.getCard_code());
}
}
}
}
log.info("生成参数完成:", req);
orderSdkService.updateCostCouponCode(req, LogTreadLocal.getTrackingNo());
//暂时统一写死为唯一发的券
List<OrderBean.AccountBean> accountList = orderBean.getAccountList().stream().filter(
account -> (defaultCardCodes.equals(account.getAccountId()))
).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(accountList)) {
accountList.forEach(o -> o.setAccountId(card.getCard_id()));
}
return true;
} catch (Exception e){
LogUtil.error("买券异常", null, null, e);
}
return true;
}
}
......@@ -1582,8 +1582,7 @@ public class OrderServiceImpl implements Orderservice {
.map(McCafeOrderTypeGather::getDesc).orElse(""));
queryOrderResponseVo.setIsCouponOrder(queryOrderResponseVo.getProducts().stream()
.filter(o -> !ProductTypeEnum.VIRTUAL_PRODUCT.getCode().equals(o.getProductType())
&& !ProductTypeEnum.WITH_ORDER_VIRTUAL_PRODUCT.getCode().equals(o.getProductType())).findAny().isPresent()?0:1);
.filter(o -> !ProductTypeEnum.getVirtualProductType().contains(o.getProductType())).findAny().isPresent()?0:1);
//48小时自动退款描述
if (storeInfo != null && storeInfo.getBizVO() != null && storeInfo.getBizVO().getStoreConfig() != null
......
package com.freemud.application.sdk.api.ordercenter.enums;
import java.util.Arrays;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
......@@ -11,7 +14,7 @@ package com.freemud.application.sdk.api.ordercenter.enums;
* @Copyright: ${DATE.YARE} www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public enum ProductTypeEnum {
public enum ProductTypeEnum {
GENERAL_PRODUCT(1,"普通商品"),
......@@ -29,8 +32,12 @@ public enum ProductTypeEnum {
;
public static List<Integer> getVirtualProductType() {
return Arrays.asList(VIRTUAL_PRODUCT.getCode(), WITH_ORDER_VIRTUAL_PRODUCT.getCode());
}
private Integer code;
private String msg;
public Integer getCode() {
......@@ -49,9 +56,6 @@ public enum ProductTypeEnum {
this.msg = msg;
}
ProductTypeEnum() {
}
ProductTypeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
......
......@@ -32,6 +32,8 @@ public class UpdateCouponCodeReq {
//发券券号
private String couponCode;
private Integer productSeq;
}
@Data
......@@ -41,6 +43,8 @@ public class UpdateCouponCodeReq {
//配置券号
private String oldCouponCode;
private Integer productSeq;
}
}
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