Commit eef77e2a by 徐康

Merge branch 'feature/20200108_xukang_麦咖啡p5v2'

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/CreateOrderProductRequest.java
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/OrderProductAddInfoDto.java
#	order-application-service/pom.xml
parents 93b3ff76 f8ac643b
......@@ -927,6 +927,7 @@ public class OrderSdkAdapter {
productBean.setAddInfo(JSONObject.toJSONString(map));
productBean.setProductProperty(orderItemResp.getProductProperty());
productBean.setExtInfo(orderItemResp.getExtInfo());
productBean.setNote(orderItemResp.getNote());
// 套餐
productBean.setParentProductId(orderItemResp.getParentProductId());
......@@ -2859,13 +2860,16 @@ public class OrderSdkAdapter {
if (0 != product.getTax()){
extInfo.setTax(product.getTax());
}
if (StringUtils.isNotEmpty(product.getTaxId())){
if (StringUtils.isNotBlank(product.getTaxId())){
extInfo.setTaxId(product.getTaxId());
}
if (StringUtils.isNotBlank(product.getCardId())){
extInfo.setCardId(product.getCardId());
}
if (StringUtils.isNotBlank(product.getCardCode())){
extInfo.setCardCode(product.getCardCode());
}
extInfo.setStapleFood(product.getStapleFood());
//if (product.getStapleFood()!=null && product.getStapleFood()>0) {
// extInfo.setStapleFood(1);
//}
extInfo.setOriginalGoodsUid(product.getOriginalGoodsUid());
extInfo.setCartGoodsUid(product.getCartGoodsUid());
......
......@@ -218,4 +218,14 @@ public class CreateOrderProductRequest extends BaseConfig {
* 是否需要积分
*/
private Boolean needBonus;
/**
* 虚拟商品使用,发券id
*/
private String cardId;
/**
* 虚拟商品使用,种子券号
*/
private String cardCode;
}
......@@ -87,4 +87,14 @@ public class OrderProductAddInfoDto extends BaseConfig {
* 是否需要积分
*/
private Boolean needBonus;
/**
* 虚拟商品发券id
*/
private String cardId;
/**
* 虚拟商品种子券号
*/
private String cardCode;
}
......@@ -523,6 +523,11 @@ public class QueryOrdersResponse {
private String extInfo;
/**
* 备注
*/
private String note;
/**
* 商品type
*/
private Integer productType;
......
......@@ -25,7 +25,7 @@
<dependency>
<groupId>com.freemud.sdk.api.assortment</groupId>
<artifactId>assortment-orderdistributor-sdk</artifactId>
<version>3.5.4.RELEASE</version>
<version>3.5.6.RELEASE</version>
<exclusions>
<exclusion>
<groupId>cn.freemud</groupId>
......
......@@ -122,6 +122,10 @@ public class OrderAdapter {
private String maCafePickTag;
@Value("${mccafe.monthCard.goodsId}")
private String mccafeMonthCardGoodsId;
@Value("${mcCafe.withOrderBuy.cardId}")
private String withOrderBuyCardId;
@Value("${mccafe.universal.coupon.code}")
private String withOrderBuyCouponCode;
/**
* coco商户
......@@ -178,6 +182,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) {
......@@ -202,42 +215,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("");
if(ProductTypeEnum.TABLEWARE_PRODUCT.getCode().equals(products.get(products.size()-1).getProductType())) {
products.add(products.size()-1, createOrderProductDemoDto);
} else {
products.add(createOrderProductDemoDto);
}
CreateOrderAccountRequest createOrderAccountDto = CreateOrderAccountRequest.builder()
.accountId("")
.name("啡常月享卡")
.price(shoppingCartGoodsDto.getPayCardFee())
.accountType(QueryOrderAccountType.WITH_ORDER_BUY_COUPON_FEE)
.sequence(orderAccountIndex++)
.productId(createOrderVo.getCardKeyCode())
.build();
orderAccountDtos.add(createOrderAccountDto);
}
createOrderDto.setProducts(products);
boolean hasDeliveryMonthCard = false;
......@@ -2443,6 +2420,9 @@ public class OrderAdapter {
}
});
createOrderProductDemoDto.setComboProduct(comboProducts);
} else if(ProductTypeEnum.VIRTUAL_PRODUCT.getCode().equals(cartGoodsDetailDto.getProductType())) {
createOrderProductDemoDto.setCardId(cartGoodsDetailDto.getMonthCardInfo().getCardNo());
createOrderProductDemoDto.setCardCode(cartGoodsDetailDto.getMonthCardInfo().getCardCode());
}
}
if(CollectionUtils.isNotEmpty(cartGoodsDetailDto.getMaterialList())) {
......@@ -2565,6 +2545,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 关联映射
*/
......
......@@ -379,6 +379,8 @@ public class QueryOrdersResponseDto {
*/
private Integer productType;
private String note;
/**
* 当前商品的实际优惠信息
*/
......
......@@ -253,6 +253,11 @@ public class ShoppingCartGoodsDto {
private String cartGoodsUid;
/**
* 月享卡加购信息
*/
private MonthCardVo monthCardInfo;
/**
* 配料或属性
*/
private List<CartGoodsDetailDto.CartGoodsExtra> extraList = new ArrayList<>(0);
......@@ -319,4 +324,21 @@ public class ShoppingCartGoodsDto {
}
@Data
public static class MonthCardVo {
/**
* 卡号
*/
private String cardNo;
/**
* 券号
*/
private String cardCode;
/**
* 月享卡类型:1.月享卡(单商品购买);2.月享卡(多商品购买);3.普通月卡
*/
private Integer type;
}
}
package cn.freemud.entities.dto.user;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: SendCouponForqujiaRequestDto
* @Package cn.freemud.entities.dto.user
* @Description:
* @author: ping1.wu
* @date: 2020/10/10 17:35
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class B2bReceiveCardRequestDto {
private String mobile;
private List<String> cardId;
}
package cn.freemud.entities.dto.user;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: SendCouponForqujiaDtoResponseDto
* @Package cn.freemud.entities.dto.user
* @Description:
* @author: ping1.wu
* @date: 2020/10/12 11:20
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class B2bReceiveCardResponseDto {
private String code;
private String message;
private List<Card> data;
@Data
public final static class Card {
private String card_code;
private String card_id;
public String received_time;
public String start_datetime;
public String end_datetime;
}
}
......@@ -13,6 +13,7 @@
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderPayItemCreateReq;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -30,6 +31,7 @@ import java.util.List;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CreateOrderVo {
@NotEmpty(message = "sessionId 不能为空")
......
......@@ -534,5 +534,10 @@ public class QueryOrderResponseVo {
*/
private PayGiftCheckAndJoinResponseDto payGiftReps;
/**
* 是否买券订单 麦咖啡使用
*/
private Integer isCouponOrder;
}
......@@ -19,6 +19,13 @@ public enum ProductType {
SETMEALPRODUCT_UPPRICE(7,"加价套餐商品"),
MATERIALPRODUCT_UPPRICE(88,"加料商品"),
LITTLE_MATERIAL_PRODUCT(89,"小料"),
GROUP_PRODUCT(3, "组合商品"),
SETMEAL_PRODUCT(6, "套餐商品"),
VIRTUAL_PRODUCT(9, "虚拟商品"),
WEIGHT_PRODUCT(11, "称重商品"),
TABLEWARE_PRODUCT(12, "餐具商品"),
;
private int code;
......
......@@ -55,6 +55,7 @@ import com.freemud.application.sdk.api.membercenter.service.MemberCenterService;
import com.freemud.application.sdk.api.membercenter.service.MemberPropertyService;
import com.freemud.application.sdk.api.ordercenter.constant.ResponseConstant;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.storecenter.request.QueryDeliveryRequest;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse;
......@@ -66,6 +67,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.awt.geom.Point2D;
......@@ -116,6 +118,9 @@ public class CheckMCCafeOrder {
@Autowired
private DeliveryServiceFeiginMCCafeClient deliveryServiceFeiginMCCafeClient;
@Value("${mccafe.universal.coupon.code}")
private String withOrderBuyCouponCode;
private static Gson gson = new Gson();
/**
* 下单会员相关校验
......@@ -558,8 +563,12 @@ public class CheckMCCafeOrder {
}
List<MCCafeCouponVo> mcCafeCouponVos = new ArrayList<>();
Map<String, String> mcCafeUsedCoupon = new HashMap<>();
List<String> seedCardList = shoppingCartGoodsDto.getProducts().stream().filter(o -> ProductTypeEnum.getVirtualProductType().contains(o.getProductType()))
.map(o -> o.getMonthCardInfo().getCardCode()).collect(Collectors.toList());
seedCardList.add(withOrderBuyCouponCode);
if(CollectionUtils.isNotEmpty(shoppingCartGoodsDto.getActivityDiscountsDtos())) {
shoppingCartGoodsDto.getActivityDiscountsDtos().forEach(o-> {
if(!seedCardList.contains(o.getActivityCode())) {
if(ActivityTypeEnum.TYPE_3.getCode().equals(o.getActivityType()) || ActivityTypeEnum.TYPE_32.getCode().equals(o.getActivityType())
|| ActivityTypeEnum.TYPE_34.getCode().equals(o.getActivityType()) || ActivityTypeEnum.TYPE_35.getCode().equals(o.getActivityType())) {
mcCafeCouponVos.add(new MCCafeCouponVo(o.getActivityCode()));
......@@ -572,6 +581,7 @@ public class CheckMCCafeOrder {
mcCafeUsedCoupon.put(o.getActivityCode(), o.getActivityName());
}
}
}
});
}
if(CollectionUtils.isNotEmpty(mcCafeCouponVos)) {
......
......@@ -23,7 +23,6 @@ import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.controller.test.PlatformBaseRequest;
import cn.freemud.entities.dto.PayAccessResponse;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean;
......@@ -41,6 +40,10 @@ import cn.freemud.entities.dto.user.SendCouponForqujiaRequestDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponVo;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import cn.freemud.management.enums.OrderSource;
import cn.freemud.management.service.OrderBaseService;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.*;
......@@ -54,9 +57,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.*;
import com.freemud.api.assortment.datamanager.entity.dto.AssortmentOpenApiEncryptDto;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.OpenPlatformEncryptUrlType;
import com.freemud.api.assortment.datamanager.manager.*;
import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
......@@ -69,15 +70,11 @@ import com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedee
import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrderResponseDto;
import com.freemud.application.sdk.api.deliverycenter.service.DeliveryService;
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.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.UpdateCouponCodeReq;
import com.freemud.application.sdk.api.ordercenter.request.UpdateDownstreamOrderCodeReq;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.ordercenter.request.*;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest;
import com.freemud.application.sdk.api.paymentcenter.client.request.SVCCardAmountRequest;
......@@ -88,9 +85,6 @@ import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto;
import com.freemud.application.sdk.api.structure.service.MessageCenterClient;
import com.freemud.openstore.sdk.util.RSASignUtil;
import com.freemud.sdk.api.assortment.message.config.MessageOfficialRefundPushMqConfig;
import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsg;
import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsgDataValue;
......@@ -98,6 +92,7 @@ import com.freemud.sdk.api.assortment.message.enums.MessageEventType;
import com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRequest;
import com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest;
import com.freemud.sdk.api.assortment.message.service.IMessageTemplatePushService;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.enums.OldOrderType;
import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.response.order.*;
......@@ -105,7 +100,6 @@ import com.freemud.sdk.api.assortment.order.response.payment.OrderPayResponse;
import cn.freemud.service.mccafe.CouponClientService;
import cn.freemud.service.mccafe.MCCafeOrderCenterSdkService;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import com.freemud.sdk.api.assortment.order.util.MapBeanConvertUtil;
import com.freemud.sdk.api.assortment.order.vo.ProductGroupVo;
import com.freemud.sdk.api.assortment.orderdistributor.entity.dto.PaymentMqMessageDto;
import com.freemud.sdk.api.assortment.orderdistributor.service.PaymentQueueService;
......@@ -151,10 +145,6 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
private String cloud_print_exchange;
@Value("${saas.order.delivery.mcCafe.callBackUrl}")
private String deliveryCallBackUrl;
@Value("${mccafe.universal.coupon.code}")
private String withOrderBuyCouponCode;
@Value("${mcCafe.withOrderBuy.cardId}")
private String withOrderBuyCardId;
@Autowired
private DeliveryFeiginClient deliveryFeiginClient;
......@@ -165,7 +155,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private FMAssistantCloudPrintClient fmAssistantCloudPrintClient;
@Autowired
private MessageCenterClient messageNoticeClient;
private OrderServiceImpl orderService;
@Autowired
private PromotionActivityClient promotionActivityClient;
@Autowired
......@@ -847,7 +837,9 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
// }
//麦咖啡随单购咖啡月卡
withOrderBuyCoupon(orderBean,sessionId);
if(withOrderBuyCoupon(orderBean, orderExtInfoDto.getThirdPartyMemberId())) {
orderBean = getOrderBean(confirmOrderDto);
}
// 如果是到店,则冻结优惠券
// 如果是外卖,则核销优惠券
......@@ -1008,6 +1000,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());
}
/**
* 创建配送单一车 -> 更新订单为异常单
*
......@@ -1079,6 +1077,19 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
}
}
}
List<String> couponCodeList = orderBean.getProductList().stream().filter(o -> ProductTypeEnum.getVirtualProductType().contains(o.getProductType()))
.map(o -> Arrays.stream(o.getNote().split("/")).collect(Collectors.toList()))
.reduce(new ArrayList<String>(), (o1, o2) -> {o1.addAll(o2); return o1;});
if(CollectionUtils.isNotEmpty(couponCodeList)) {
QueryUseCouponOrderReq queryUseCouponOrderReq = new QueryUseCouponOrderReq();
queryUseCouponOrderReq.setOrderCode(orderBean.getOid());
queryUseCouponOrderReq.setPartnerId(orderBean.getCompanyId());
queryUseCouponOrderReq.setCouponCodeList(couponCodeList);
com.freemud.application.sdk.api.ordercenter.response.BaseResponse<Integer> response = orderSdkService.queryUseCouponOrder(queryUseCouponOrderReq, LogTreadLocal.getTrackingNo());
if(null != response && ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(response.getCode()) && response.getResult() != 0) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "优惠券已经在其他订单使用过了,无法退款");
}
}
/**
* 已接单,制作完成,配送中,未接单,用户可申请退款
......@@ -1529,73 +1540,136 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
* 随单购月卡调会员发券与更新订单使用的优惠券与买的优惠券
* @param orderBean
*/
private void withOrderBuyCoupon(QueryOrdersResponseDto.DataBean.OrderBean orderBean,String sessionId){
AssortmentCustomerInfoVo assortmentCustomerInfoVo = customerInfoManager.getCustomerInfoByObject(sessionId);
public boolean withOrderBuyCoupon(QueryOrdersResponseDto.DataBean.OrderBean orderBean, String thirdPartyMemberId){
LogUtil.info("发券入参:", thirdPartyMemberId, JSON.toJSONString(orderBean));
try{
boolean isWithOrderBuyCoupon = false;
if(CollectionUtils.isNotEmpty(orderBean.getOrderCostDetailList())){
for (OrderCostResp accountBean : orderBean.getOrderCostDetailList()){
if(accountBean.getCostType() == 10){
isWithOrderBuyCoupon = true;
List<String> cardIds = new ArrayList<>();
List<String> defaultCardCodes = new ArrayList<>();
for (OrderBean.ProductBean productBean : orderBean.getProductList()){
if(ProductTypeEnum.getVirtualProductType().contains(productBean.getProductType())) {
OrderProductAddInfoDto extInfo = JSON.parseObject(productBean.getExtInfo(), OrderProductAddInfoDto.class);
for(int i=0;i<productBean.getNumber();i++) {
cardIds.add(extInfo.getCardId());
}
defaultCardCodes.add(extInfo.getCardCode());
}
}
if(!isWithOrderBuyCoupon){
return;
if(CollectionUtils.isEmpty(cardIds)){
return false;
}
String notBuyCouponCode = withOrderBuyCouponCode;
String cardId = withOrderBuyCardId;
SendCouponForqujiaRequestDto request = new SendCouponForqujiaRequestDto();
request.setReceivedId(orderBean.getOid());
request.setCardIds(Arrays.asList(cardId));
request.setThirdPartyMemberId(assortmentCustomerInfoVo.getThirdPartyMemberID());
request.setCardIds(cardIds);
request.setThirdPartyMemberId(thirdPartyMemberId);
SendCouponForqujiaDtoResponseDto responseDto = customerExtendClient.sendCouponForqujia(request);
if(!Objects.equals(responseDto.getCode(), ResponseResult.SUCCESS.getCode())){
LogUtil.error("sendCouponForqujia", JSON.toJSONString(request), JSON.toJSONString(responseDto),null);
return;
LogUtil.error("sendCouponForqujia", JSON.toJSONString(request), JSON.toJSONString(responseDto));
return false;
}
if(responseDto.getData() == null || CollectionUtils.isEmpty(responseDto.getData().getCard_list())){
return;
return false;
}
String buyCouponCode = responseDto.getData().getCard_list().get(0).getCard_code();
boolean useDiscount = false;
if(CollectionUtils.isNotEmpty(orderBean.getProductList())){
for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean productBean : orderBean.getProductList()){
if(CollectionUtils.isNotEmpty(productBean.getDiscountList())){
for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean.ProductDiscount discount : productBean.getDiscountList()){
if(notBuyCouponCode.equals(discount.getDiscountId())){
discount.setDiscountId(buyCouponCode);
useDiscount = true;
List<SendCouponForqujiaDtoResponseDto.Card> cardList = responseDto.getData().getCard_list();
MCCafeCouponRequest mcCafeCouponRequest = MCCafeCouponRequest.builder()
.ver(88)
.reqtype(CouponReqTypeEnum.BATCH_QUERY.getCode())
.partnerId(Integer.parseInt(orderBean.getCompanyId()))
.store_id(orderBean.getShopId())
.station_id("1")
.operator_id(orderBean.getUserId())
.channel(OrderSource.ALIPAY.getSource().equals(orderBean.getSource())?MCCafeChannelEnum.MOCOFFEE_ZFB.getName():MCCafeChannelEnum.MOCOFFEE_WX.getName())
.couponlist(cardList.stream().map(o -> new MCCafeCouponVo(o.getCard_code())).collect(Collectors.toList()))
.sign("skip")
.build();
McdNetBatchQueryResponse mcdNetBatchQueryResponse = couponClientService.batchQuery(mcCafeCouponRequest);
if (mcdNetBatchQueryResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS.equals(mcdNetBatchQueryResponse.getStatusCode())
|| CollectionUtils.isEmpty(mcdNetBatchQueryResponse.getCouponlist())) {
LogUtil.error("获取优惠券详情失败,发券失败", mcCafeCouponRequest, mcdNetBatchQueryResponse);
return false;
}
Map<String, Integer> cardStatusMap = mcdNetBatchQueryResponse.getCouponlist().stream()
.collect(Collectors.toMap(McdNetBatchQueryResponse.Coupon::getCode, McdNetBatchQueryResponse.Coupon::getStatusCode, (k1, k2) -> k1));
Map<String, List<SendCouponForqujiaDtoResponseDto.Card>> cardMap = new HashMap<>();
UpdateCouponCodeReq req = new UpdateCouponCodeReq();
req.setOrderCode(orderBean.getOid());
req.setPartnerId(orderBean.getCompanyId());
req.setCouponReceiveInfoList(new ArrayList<>());
req.setCouponUpdateInfoList(new ArrayList<>());
LogUtil.info("准备开始生成参数:", orderBean, null);
for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean productBean : orderBean.getProductList()) {
if(ProductTypeEnum.getVirtualProductType().contains(productBean.getProductType())) {
UpdateCouponCodeReq.CouponReceiveInfo couponReceiveInfo = new UpdateCouponCodeReq.CouponReceiveInfo();
couponReceiveInfo.setGoodsId(productBean.getSpecification());
couponReceiveInfo.setProductSeq(productBean.getSequence());
OrderProductAddInfoDto extInfo = JSON.parseObject(productBean.getExtInfo(), OrderProductAddInfoDto.class);
String cardCodeStr = "";
numberFor:
for(int j=0;j<productBean.getNumber();j++) {
cardFor:
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(), new ArrayList<>(Arrays.asList(cardList.get(i))));
} else {
cardMap.get(extInfo.getCardCode()).add(cardList.get(i));
}
cardList.remove(i);
break cardFor;
}
}
}
couponReceiveInfo.setCouponCode(cardCodeStr.substring(0, cardCodeStr.length()-1));
req.getCouponReceiveInfoList().add(couponReceiveInfo);
}
}
UpdateCouponCodeReq req = new UpdateCouponCodeReq();
req.setCouponCode(buyCouponCode);
if(useDiscount){
req.setOldCouponCode(notBuyCouponCode);
for(QueryOrdersResponseDto.DataBean.OrderBean.ProductBean productBean : orderBean.getProductList()) {
if(!ProductTypeEnum.getVirtualProductType().contains(productBean.getProductType()) && CollectionUtils.isNotEmpty(productBean.getDiscountList())) {
for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean.ProductDiscount discount : productBean.getDiscountList()) {
if(null != discount.getDiscountType() && OldOrderAccountType.PRODUCT_COUPON.getCode().equals(discount.getDiscountType())
&& defaultCardCodes.contains(discount.getDiscountId())) {
UpdateCouponCodeReq.CouponUpdateInfo couponUpdateInfo = new UpdateCouponCodeReq.CouponUpdateInfo();
couponUpdateInfo.setProductSeq(productBean.getSequence());
couponUpdateInfo.setOldCouponCode(discount.getDiscountId());
List<SendCouponForqujiaDtoResponseDto.Card> list = new ArrayList<>(cardMap.get(discount.getDiscountId()));
if(CollectionUtils.isEmpty(list)) {
continue;
}
cardFor:
for(int i=0;i<list.size();i++) {
if(ResponseCodeConstant.RESPONSE_SUCCESS.equals(cardStatusMap.get(list.get(i).getCard_code()))) {
couponUpdateInfo.setCouponCode(list.get(i).getCard_code());
list.remove(i);
cardMap.put(discount.getDiscountId(), list);
break cardFor;
}
}
if(StringUtils.isBlank(couponUpdateInfo.getCouponCode())) {
continue;
}
req.getCouponUpdateInfoList().add(couponUpdateInfo);
}
}
}
}
req.setOrderCode(orderBean.getOid());
orderSdkService.updateCostCouponCode(req,LogTreadLocal.getTrackingNo());
LogUtil.info("生成参数完成:", req, null);
List<OrderBean.AccountBean> accountList = orderBean.getAccountList().stream().filter(
account -> (withOrderBuyCouponCode.equals(account.getAccountId()))
).collect(Collectors.toList());
orderSdkService.updateCostCouponCode(req, LogTreadLocal.getTrackingNo());
if(CollectionUtils.isNotEmpty(accountList)) {
accountList.forEach(o -> o.setAccountId(buyCouponCode));
}
return true;
} catch (Exception e){
LogUtil.error("券异常", null, null, e);
LogUtil.error("券异常", null, null, e);
}
return true;
}
}
......@@ -91,6 +91,7 @@ import com.freemud.application.sdk.api.ordercenter.entities.PayItem;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
......@@ -1634,6 +1635,9 @@ public class OrderServiceImpl implements Orderservice {
queryOrderResponseVo.setOrderTypeDesc(Optional.ofNullable(McCafeOrderTypeGather.getByCode(queryOrderResponseVo.getOrderType()))
.map(McCafeOrderTypeGather::getDesc).orElse(""));
queryOrderResponseVo.setIsCouponOrder(queryOrderResponseVo.getProducts().stream()
.filter(o -> !ProductTypeEnum.getVirtualProductType().contains(o.getProductType())).findAny().isPresent()?0:1);
//48小时自动退款描述
if (storeInfo != null && storeInfo.getBizVO() != null && storeInfo.getBizVO().getStoreConfig() != null
&& queryOrderResponseVo.getRefundStatus() != null && queryOrderResponseVo.getRefundStatus() == 1) {
......
......@@ -15,9 +15,7 @@ package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.GetMemberCouponListRequestDto;
import cn.freemud.entities.dto.GetMemberCouponListResponseDto;
import cn.freemud.entities.dto.user.QujiaForbiddenCardCodeRequestDto;
import cn.freemud.entities.dto.user.SendCouponForqujiaDtoResponseDto;
import cn.freemud.entities.dto.user.SendCouponForqujiaRequestDto;
import cn.freemud.entities.dto.user.*;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -34,4 +32,7 @@ public interface CustomerExtendClient {
@PostMapping(value = "/customerextendservice/qujia/receiveCard")
SendCouponForqujiaDtoResponseDto sendCouponForqujia(@RequestBody SendCouponForqujiaRequestDto request);
@PostMapping(value = "/customerextendservice/qujia/b2breceiveCard")
B2bReceiveCardResponseDto b2bReceiveCard(@RequestBody B2bReceiveCardRequestDto request);
}
......@@ -231,6 +231,11 @@ public class InterfaceAddressConstant {
public static final String UPDATE_COST_COUPONCODE = "/order/v2/mcCafe/updateCostCouponCode";
/**
* 查询使用了优惠券的订单数量
*/
public static final String QUERY_USE_COUPON_ORDER = "/order/v2/mcCafe/queryUseCouponOrder";
/**
* 更新买一赠一寄件发送优惠券信息
*/
public static final String UPDATE_BUYONEGIVEONE_SEND_COUPON = "order/v2/updateBuyOneGiveOneSendCoupon";
......
package com.freemud.application.sdk.api.ordercenter.enums;
import java.util.Arrays;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
......@@ -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;
......
package com.freemud.application.sdk.api.ordercenter.request;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: UpdateCouponCodeReq
* @Package cn.freemud.shared.order.vo.req.order
* @Description:
* @author: ping1.wu
* @date: 2020/10/8 10:33
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class QueryUseCouponOrderReq {
private String orderCode;
private String partnerId;
private List<String> couponCodeList;
}
......@@ -2,6 +2,8 @@ package com.freemud.application.sdk.api.ordercenter.request;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
......@@ -19,10 +21,32 @@ public class UpdateCouponCodeReq {
private String orderCode;
private String partnerId;
private List<CouponReceiveInfo> couponReceiveInfoList;
private List<CouponUpdateInfo> couponUpdateInfoList;
@Data
public static class CouponReceiveInfo {
private String goodsId;
//发券券号
private String couponCode;
private Integer productSeq;
}
@Data
public static class CouponUpdateInfo {
//发券券号
private String couponCode;
//配置券号
private String oldCouponCode;
private Integer productSeq;
}
}
......@@ -900,4 +900,17 @@ public class OrderSdkService {
return responseHandle(responseDTO);
}
/**
* 查询使用了特定优惠券的订单数量
* @param request
* @param trackingNo
* @return
*/
public BaseResponse<Integer> queryUseCouponOrder(QueryUseCouponOrderReq request, String trackingNo) {
OrderBaseResp<Integer> responseDTO = RequestThirdPartyUtils.httpJsonReqComplexNew(restTemplate, QUERY_USE_COUPON_ORDER,
createBaseRequest(request, trackingNo), new ParameterizedTypeReference<OrderBaseResp>() {
});
return responseHandle(responseDTO);
}
}
......@@ -269,7 +269,7 @@ public class ShoppingCartMCoffeeServiceImpl {
isContinue= false;
}
if(StringUtils.isNotEmpty(goodsId) && StringUtils.isNotEmpty(couponCode) && isContinue
&& cartGoods.getName().equals("啡常搭") && cartGoods.getGoodsType().equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType())
&& "啡常搭".equals(cartGoods.getName()) && GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())
&& CollectionUtils.isNotEmpty(cartGoods.getProductComboList()) && cartGoods.getProductComboList().size() == 1
&& cartGoods.getProductComboList().get(0).getSkuId().equals(goodsId)
&& CollectionUtils.isNotEmpty(cartGoods.getProductGroupList()) && cartGoods.getProductGroupList().size() == 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