Commit 76bad00c by 徐康

Merge branch 'feature/20200915_麦咖啡p2v3活动入机增加TENDERID字段'

# Conflicts:
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
parents 283076d3 c07e9c32
......@@ -655,7 +655,7 @@ public class CouponAdapter {
return mcCafeCouponRequest;
}
public MCCafeCouponRequest convert2MCCafeCouponRequest(QueryOrdersResponseDto.DataBean.OrderBean orderBean, QueryOrdersResponseDto.DataBean.OrderBean.AccountBean accountBean) {
public MCCafeCouponRequest convert2MCCafeCouponRequest(QueryOrdersResponseDto.DataBean.OrderBean orderBean, QueryOrdersResponseDto.DataBean.OrderBean.AccountBean accountBean, McdNetBatchQueryResponse.Coupon coupon) {
List<MCCafeProductRedeemVo> products = new ArrayList<>();
//商品券核销核销参数
if (QueryOrderAccountType.PRODUCT_COUPON.equals(orderAdapter.getQueryOrderAccountType(OldOrderAccountType.getByCode(accountBean.getType())))) {
......@@ -675,6 +675,9 @@ public class CouponAdapter {
mcCafeProductRedeemVo.setCustomer_code(productBean.getCustomerCode());
mcCafeProductRedeemVo.setConsume_num(productDiscount.getDiscountQty());
mcCafeProductRedeemVo.setSeq(i + 1);
if(null != coupon && CollectionUtils.isNotEmpty(coupon.getCodeInfo().getGroups())) {
mcCafeProductRedeemVo.setGid(coupon.getCodeInfo().getGroups().get(0).getGid());
}
products.add(mcCafeProductRedeemVo);
}
}
......@@ -692,35 +695,14 @@ public class CouponAdapter {
products.add(mcCafeProductRedeemVo);
}
} else if (QueryOrderAccountType.FREIGHT_COUPON.equals(orderAdapter.getQueryOrderAccountType(OldOrderAccountType.getByCode(accountBean.getType())))) {
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(Arrays.asList(new MCCafeCouponVo(accountBean.getAccountId())))
.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 null;
} else {
try {
McdNetCouponProductRespDto mcdNetCouponProductRespDto = mcdNetBatchQueryResponse.getCouponlist().get(0).getCodeInfo().getProducts().get(0);
MCCafeProductRedeemVo mcCafeProductRedeemVo = new MCCafeProductRedeemVo();
mcCafeProductRedeemVo.setKeyProductCode(mcdNetCouponProductRespDto.getPid());
mcCafeProductRedeemVo.setCustomer_code(mcdNetCouponProductRespDto.getPid());
mcCafeProductRedeemVo.setConsume_num(mcdNetCouponProductRespDto.getNumber());
mcCafeProductRedeemVo.setSeq(1);
products.add(mcCafeProductRedeemVo);
} catch (Exception e) {
LogUtil.error("获取运费券绑定商品异常,无法核销", mcCafeCouponRequest, mcdNetBatchQueryResponse);
return null;
}
if(null != coupon) {
McdNetCouponProductRespDto mcdNetCouponProductRespDto = coupon.getCodeInfo().getProducts().get(0);
MCCafeProductRedeemVo mcCafeProductRedeemVo = new MCCafeProductRedeemVo();
mcCafeProductRedeemVo.setKeyProductCode(mcdNetCouponProductRespDto.getPid());
mcCafeProductRedeemVo.setCustomer_code(mcdNetCouponProductRespDto.getPid());
mcCafeProductRedeemVo.setConsume_num(mcdNetCouponProductRespDto.getNumber());
mcCafeProductRedeemVo.setSeq(1);
products.add(mcCafeProductRedeemVo);
}
}
MCCafeCouponRequest mcCafeCouponRequest = new MCCafeCouponRequest();
......
......@@ -256,7 +256,8 @@ public class DeliveryAdapter {
|| OldOrderAccountType.BUY_DISCOUNT.getCode().equals(accountBean.getType())
|| OldOrderAccountType.PRODUCT_COUPON.getCode().equals(accountBean.getType())
|| OldOrderAccountType.SUPER_PURCHASE.getCode().equals(accountBean.getType())
|| OldOrderAccountType.DISCOUNT_AMOUNT.getCode().equals(accountBean.getType())) {
|| OldOrderAccountType.DISCOUNT_AMOUNT.getCode().equals(accountBean.getType())
|| OldOrderAccountType.FREIGHT_COUPON.getCode().equals(accountBean.getType())) {
CreateDeliveryPreferentialVo createDeliveryPreferentialVo = new CreateDeliveryPreferentialVo();
createDeliveryPreferentialVo.setPreferentialContent(accountBean.getName());
createDeliveryPreferentialVo.setPreferentialPrice(0-accountBean.getPrice());
......
......@@ -481,6 +481,12 @@ public class CheckMCCafeOrder {
.menuType(createOrderVo.getMenuType())
.build();
List<MCCafeCouponVo> couponCodeList = new ArrayList<>();
if("remove".equals(createOrderVo.getCouponCode())) {
createOrderVo.setCouponCode("");
}
if("remove".equals(createOrderVo.getFreightCouponCode())) {
createOrderVo.setFreightCouponCode("");
}
if (StringUtils.isNotBlank(createOrderVo.getCouponCode())) {
couponCodeList.add(new MCCafeCouponVo(createOrderVo.getCouponCode()));
}
......
......@@ -8,13 +8,13 @@ import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.enums.ResponseResult;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponLockRequest;
import cn.freemud.management.entities.dto.request.order.MCCafeProductRedeemVo;
import cn.freemud.management.entities.dto.request.order.MCCafeTransactionVo;
import cn.freemud.management.entities.dto.request.order.*;
import cn.freemud.enums.CouponReqTypeEnum;
import cn.freemud.enums.MCCafeChannelEnum;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import cn.freemud.management.entities.dto.response.coupon.McdNetCouponInfoRespDto;
import cn.freemud.management.entities.dto.response.coupon.McdNetCouponProductRespDto;
import cn.freemud.management.enums.OrderSource;
import cn.freemud.management.thirdparty.CouponOfflineMCCafeClient;
import cn.freemud.service.mccafe.CouponClientService;
import cn.freemud.utils.LogUtil;
......@@ -27,6 +27,7 @@ import com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedee
import com.freemud.application.sdk.api.couponcenter.offline.service.OfflineCouponSdkService;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.productcenter.response.menu.GetMenuCategoryByIdsResponse;
import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.sdk.api.assortment.order.enums.*;
import com.freemud.sdk.api.assortment.order.request.order.CreateOrderAccountRequest;
......@@ -38,6 +39,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
......@@ -173,8 +175,29 @@ public class CouponClientServiceImpl implements CouponClientService {
return null;
}
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(accountList.stream().map(o -> new MCCafeCouponVo(o.getAccountId())).collect(Collectors.toList()))
.sign("skip")
.build();
McdNetBatchQueryResponse mcdNetBatchQueryResponse = batchQuery(mcCafeCouponRequest);
if (mcdNetBatchQueryResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS.equals(mcdNetBatchQueryResponse.getStatusCode())
|| CollectionUtils.isEmpty(mcdNetBatchQueryResponse.getCouponlist())) {
LogUtil.error("获取优惠券详情失败,无法核销", mcCafeCouponRequest, mcdNetBatchQueryResponse);
return null;
}
Map<String, McdNetBatchQueryResponse.Coupon> couponMap = mcdNetBatchQueryResponse.getCouponlist().stream()
.collect(Collectors.toMap(McdNetBatchQueryResponse.Coupon::getCode, Function.identity(), (k1, k2) -> k1));
List<MCCafeCouponRequest> list =
accountList.stream().map(accountBean -> couponAdapter.convert2MCCafeCouponRequest(orderBean, accountBean)).filter(o -> o!=null).collect(Collectors.toList());
accountList.stream().map(accountBean -> couponAdapter.convert2MCCafeCouponRequest(orderBean, accountBean, couponMap.get(accountBean.getAccountId()))).filter(o -> o!=null).collect(Collectors.toList());
List<CouponRedeemResponse> couponRedeemResponseList = new ArrayList<>();
List<CouponRedeemResponse> couponRedeemResponseListAll = new ArrayList<>();
......
package cn.freemud.management.adapter;
import cn.freemud.base.constant.Version;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponLockRequest;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest;
import cn.freemud.management.entities.dto.request.order.MCCafeProductRedeemVo;
import cn.freemud.management.entities.dto.request.order.MCCafeTransactionVo;
import cn.freemud.management.entities.dto.request.order.*;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import cn.freemud.management.enums.ActivityTypeEnum;
import cn.freemud.management.enums.CouponReqTypeEnum;
import cn.freemud.management.enums.MCCafeChannelEnum;
import cn.freemud.management.enums.OrderSource;
import cn.freemud.management.thirdparty.CouponOfflineMCCafeClient;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.enums.OrderSourceType;
import com.freemud.sdk.api.assortment.order.enums.QueryOrderAccountType;
import com.freemud.sdk.api.assortment.order.request.order.CreateOrderAccountRequest;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Component
@Slf4j
public class McCafeCouponAdapter {
@Autowired
private CouponOfflineMCCafeClient couponOfflineMCCafeClient;
private Integer SUCCESS = 100;
public List<MCCafeCouponRequest> convertOrderBean2CouponLockRequest(QueryOrdersResponse.DataBean.OrderBean orderBean) {
if (null == orderBean || CollectionUtils.isEmpty(orderBean.getAccountList())) {
return null;
......@@ -39,12 +49,32 @@ public class McCafeCouponAdapter {
if (CollectionUtils.isEmpty(accountList) ) {
return null;
}
MCCafeCouponRequest mcCafeCouponRequest = MCCafeCouponRequest.builder()
.ver(88)
.reqtype(88)
.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(accountList.stream().map(o -> new MCCafeCouponVo(o.getAccountId())).collect(Collectors.toList()))
.sign("skip")
.build();
McdNetBatchQueryResponse mcdNetBatchQueryResponse = couponOfflineMCCafeClient.batchQuery(mcCafeCouponRequest);
if (mcdNetBatchQueryResponse == null || !SUCCESS.equals(mcdNetBatchQueryResponse.getStatusCode())
|| CollectionUtils.isEmpty(mcdNetBatchQueryResponse.getCouponlist())) {
log.error("获取优惠券详情失败,无法核销", mcCafeCouponRequest, mcdNetBatchQueryResponse);
return null;
}
Map<String, McdNetBatchQueryResponse.Coupon> couponMap = mcdNetBatchQueryResponse.getCouponlist().stream()
.collect(Collectors.toMap(McdNetBatchQueryResponse.Coupon::getCode, Function.identity(), (k1, k2) -> k1));
List<MCCafeCouponRequest> list = new ArrayList<>();
accountList.forEach(accountBean -> list.add(convert2MCCafeCouponRequest(orderBean, accountBean)));
accountList.forEach(accountBean -> list.add(convert2MCCafeCouponRequest(orderBean, accountBean, couponMap.get(accountBean.getAccountId()))));
return list;
}
public MCCafeCouponRequest convert2MCCafeCouponRequest(QueryOrdersResponse.DataBean.OrderBean orderBean, QueryOrdersResponse.DataBean.OrderBean.AccountBean accountBean) {
public MCCafeCouponRequest convert2MCCafeCouponRequest(QueryOrdersResponse.DataBean.OrderBean orderBean, QueryOrdersResponse.DataBean.OrderBean.AccountBean accountBean, McdNetBatchQueryResponse.Coupon coupon) {
List<MCCafeProductRedeemVo> products = new ArrayList<>();
//商品券核销核销参数
if (QueryOrderAccountType.PRODUCT_COUPON.equals(getQueryOrderAccountType(OldOrderAccountType.getByCode(accountBean.getType())))) {
......@@ -64,6 +94,9 @@ public class McCafeCouponAdapter {
mcCafeProductRedeemVo.setCustomer_code(productBean.getCustomerCode());
mcCafeProductRedeemVo.setConsume_num(productDiscount.getDiscountQty());
mcCafeProductRedeemVo.setSeq(i + 1);
if(null != coupon && CollectionUtils.isNotEmpty(coupon.getCodeInfo().getGroups())) {
mcCafeProductRedeemVo.setGid(coupon.getCodeInfo().getGroups().get(0).getGid());
}
products.add(mcCafeProductRedeemVo);
}
}
......
......@@ -100,6 +100,11 @@ public class McdNetCouponInfoRespDto {
private Integer status;
private Integer extend_type;
/**
* 商品组信息
*/
private List<McdNetCouponProductGroupRespDto> groups;
/**
* 只有商品券时返回
*/
......
package cn.freemud.management.entities.dto.response.coupon;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
@Data
@NoArgsConstructor
public class McdNetCouponProductGroupRespDto implements Serializable {
private Integer gid;
private Integer gmax;
private List<McdNetCouponProductRespDto> products;
}
......@@ -342,12 +342,8 @@ public class ShoppingCartMCoffeeServiceImpl {
* 如果couponCode为空,则从缓存里尝试获取
* 如果couponCode不为空,则设置到缓存里
*/
// List<String> couponList = new ArrayList<>();
if(StringUtils.isEmpty(couponCode)) {
couponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.COUPON.getCode());
// if(StringUtils.isNotEmpty(couponCode)) {
// couponList.add(couponCode);
// }
} else {
if("remove".equals(couponCode)) {
couponCode = "";
......@@ -357,9 +353,6 @@ public class ShoppingCartMCoffeeServiceImpl {
if(StringUtils.isEmpty(freightCouponCode)) {
freightCouponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode());
// if(StringUtils.isNotEmpty(freightCouponCode)) {
// couponList.add(freightCouponCode);
// }
} else {
if("remove".equals(freightCouponCode)) {
freightCouponCode = "";
......@@ -367,37 +360,49 @@ public class ShoppingCartMCoffeeServiceImpl {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, freightCouponCode, shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode());
}
//校验代金券和运费券是否可用
// if(CollectionUtils.isNotEmpty(couponList)) {
// List<CouponState> couponStates = couponDiscountCalculation.buildAvailableCoupons(cartGoodsList, partnerId, storeId, couponList);
// if(CollectionUtils.isNotEmpty(couponStates)) {
// Map<String, Integer> couponStateMap = couponStates.stream().collect(Collectors.toMap(CouponState::getCouponCode, CouponState::getState, (k1, k2) -> k1));
// if(null == couponStateMap.get(couponCode) || Objects.equals(couponStateMap.get(couponCode), CouponStateEnum.STATE_1.getCode())) {
// couponCode = "";
// }
// if(null == couponStateMap.get(freightCouponCode) || Objects.equals(couponStateMap.get(freightCouponCode), CouponStateEnum.STATE_1.getCode())) {
// freightCouponCode = "";
// }
// } else {
// couponCode = "";
// freightCouponCode = "";
// }
// }
shoppingCartInfoRequestVo.setFreightCouponCode(freightCouponCode);
//放到参数里
if(StringUtils.isNotEmpty(couponCode) ) {
shoppingCartInfoRequestVo.setCouponCode(couponCode);
shoppingCartGoodsResponseVo.setCouponCode(couponCode);
}
if(StringUtils.isNotEmpty(freightCouponCode)) {
shoppingCartInfoRequestVo.setFreightCouponCode(freightCouponCode);
shoppingCartGoodsResponseVo.setFreightCouponCode(freightCouponCode);
}
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList,shoppingCartInfoRequestVo.getFreightCouponCode());
// 促销活动的优惠金额计算
calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult = calculationService.updateShoppingCartGoodsDiscount(partnerId, storeId, userId, appId, orderType, assortmentCustomerInfoVo.isMemberPaid(), menuType, receiveId, null,
cartGoodsList, coupons, new ArrayList<>(), shoppingCartGoodsResponseVo);
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
shoppingCartGoodsResponseVo.setCouponCode(couponCode);
shoppingCartGoodsResponseVo.setFreightCouponCode(freightCouponCode);
//先出参里的券设置为空,然后如果可用,再放到出参里
shoppingCartGoodsResponseVo.setCouponCode("");
shoppingCartGoodsResponseVo.setFreightCouponCode("");
if(StringUtils.isNotEmpty(couponCode) || StringUtils.isNotEmpty(freightCouponCode)) {
String finalCouponCode = couponCode;
String finalFreightCouponCode = freightCouponCode;
if(null != calculationDiscountResult && CollectionUtils.isNotEmpty(calculationDiscountResult.getDiscounts())) {
calculationDiscountResult.getDiscounts().stream().forEach(o -> {
if(o.getActivityCode().equals(finalCouponCode)) {
shoppingCartGoodsResponseVo.setCouponCode(finalCouponCode);
}
if(o.getActivityCode().equals(finalFreightCouponCode)) {
shoppingCartGoodsResponseVo.setFreightCouponCode(finalFreightCouponCode);
}
});
}
}
if(ObjectUtils.notEqual(shoppingCartGoodsResponseVo.getCouponCode(), couponCode)) {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, shoppingCartGoodsResponseVo.getCouponCode(), shoppingCartBaseService, SaveCouponType.COUPON.getCode());
}
if(ObjectUtils.notEqual(shoppingCartGoodsResponseVo.getFreightCouponCode(), freightCouponCode)) {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, shoppingCartGoodsResponseVo.getFreightCouponCode(), shoppingCartBaseService, SaveCouponType.FREIGHT_COUPON.getCode());
}
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
......
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