Commit 311b45a5 by 徐康

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

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	order-application-service/pom.xml
#	order-application-service/src/main/java/cn/freemud/adapter/DeliveryAdapter.java
#	order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
parents 59432323 6d7055fa
......@@ -176,4 +176,8 @@ public class CreateOrderProductRequest extends BaseConfig {
private double tax;
private String taxId;
private List<String> specialCodes;
private List<OrderSpecialExtraAttrRequest> specialAttrs;
}
......@@ -70,4 +70,8 @@ public class OrderProductAddInfoDto extends BaseConfig {
private double tax;
private String taxId;
private List<String> specialCodes;
private List<OrderSpecialExtraAttrRequest> specialAttrs;
}
package com.freemud.sdk.api.assortment.order.request.order;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderSpecialExtraAttrRequest {
/**
* 属性名
*/
private String attributeName;
/**
* 入机code
*/
private String specialCode;
}
......@@ -43,6 +43,16 @@ public interface OrderCenterSdkService {
QueryOrdersResponse queryOrders(QueryOrdersRequest queryOrdersRequest);
/**
* 根据订单编号查询订单信息 C端
*/
QueryOrderByIdResponse queryMCCafeOrderById(BaseQueryOrderRequest baseQueryOrderRequest);
/**
* 条件查询订单列表 C端
*/
QueryOrdersResponse queryMCCafeOrders(QueryOrdersRequest queryOrdersRequest);
/**
* 删除订单 C端
*/
BaseOrderResponse deleteOrder(DeleteOrderRequest deleteOrderRequest);
......
......@@ -465,6 +465,30 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
}
@Override
public QueryOrderByIdResponse queryMCCafeOrderById(BaseQueryOrderRequest request) {
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(request.getOrderClient(), request.getOrderId(),
request.getThirdOrderCode(), request.getWithOperationHistory(), request.getTrackingNo());
QueryOrderByIdResponse response = new QueryOrderByIdResponse();
if (orderInfo == null || orderInfo.getResult() == null) {
return response;
}
response.setErrcode(Integer.parseInt(orderInfo.getCode()));
response.setErrmsg(orderInfo.getMessage());
if (orderInfo.getResult().getOrderCode() == null || "".equals(orderInfo.getResult().getOrderCode())) {
return response;
}
QueryOrderByIdResponse orderByIdResponse = orderSdkAdapter.convent2QueryOrderByIdResponse(orderInfo);
return orderByIdResponse;
}
@Override
public QueryOrdersResponse queryMCCafeOrders(QueryOrdersRequest queryOrdersRequest) {
OrderUserConditionsReq request = orderSdkAdapter.convent2QueryOrdersRequest(queryOrdersRequest);
com.freemud.application.sdk.api.ordercenter.response.BaseResponse<QueryOrderForUserResp> userorderResponse = orderSdkService.queryOrderForUser(request, queryOrdersRequest.getTrackingNo());
return orderSdkAdapter.convent2QueryOrdersResponse(userorderResponse);
}
@Override
public BaseOrderResponse deleteOrder(DeleteOrderRequest deleteOrderRequest) {
OrderDeleteReq request = new OrderDeleteReq();
request.setOrderCode(deleteOrderRequest.getOrderId());
......
......@@ -21,6 +21,10 @@ public class RedisKeyConstant {
/**
* 用户购物车在redis的key前缀
*/
public final static String SAAS_SHOPPINGCART_COUPON_KEY_PREFIX = "saas:user:info:cart:coupon:";
/**
* 用户购物车在redis的key前缀
*/
public final static String SAAS_USER_INFO_CART_CARTADDPRODUCT = "saas:user:info:cart:cartAddProduct:goods:";
/**
* 用户购物车总价在redis的key前缀
......
......@@ -34,6 +34,8 @@ public class CartParamDto {
private String cartGoodsUid;
private String couponCode;
private Integer qty;
private MealClearOperationEnum operationType;
......
......@@ -80,6 +80,16 @@ public interface ShoppingCartBaseService {
BaseResponse<List<CartGoods>> getCartGoodsList(CartParamDto cartParamDto, String trackingNo);
/**
* 获取购物车商品代金券
*
* @param cartParamDto
* @return
*/
default BaseResponse<String> getCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
return null;
}
/**
* 设置购物车商品行集合信息
*
* @param cartParamDto
......@@ -87,6 +97,16 @@ public interface ShoppingCartBaseService {
*/
BaseResponse<List<CartGoods>> setCartGoodsList(CartParamDto cartParamDto, String trackingNo);
/**
* 设置购物车代金券信息
*
* @param cartParamDto
* @return
*/
default BaseResponse<String> setCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
return null;
}
default boolean addCartGoodList(CartParamDto cartParamDto) {
return true;
}
......@@ -99,6 +119,14 @@ public interface ShoppingCartBaseService {
BaseResponse clear(CartParamDto cartParamDto, String trackingNo);
/**
* 清除麦咖啡购物车商品行信息
*
* @param cartParamDto
*/
default BaseResponse clearMCCafe(CartParamDto cartParamDto, String trackingNo) {
return null;
}
/**
* 获取商品详细信息
*
* @param getProductInfoRequest
......
......@@ -39,6 +39,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
......@@ -107,6 +108,19 @@ public class ShoppingCartBaseServiceImpl implements ShoppingCartBaseService {
}
@Override
public BaseResponse<String> getCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartCouponCodeKey(cartParamDto);
BoundValueOperations<String, String> operations = redisTemplate.boundValueOps(redisKey);
String couponCode = operations.get();
return CartResponseUtil.success(couponCode);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "getCartCouponCode", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<List<CartGoods>> setCartGoodsList(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartGoodsKey(cartParamDto);
......@@ -124,6 +138,20 @@ public class ShoppingCartBaseServiceImpl implements ShoppingCartBaseService {
}
@Override
public BaseResponse<String> setCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartCouponCodeKey(cartParamDto);
redisTemplate.delete(redisKey);
BoundValueOperations<String, String> operations = redisTemplate.boundValueOps(redisKey);
operations.set(cartParamDto.getCouponCode());
return CartResponseUtil.success();
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "setCartCouponCode", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<CartGoods> getCartGoods(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartGoodsKey(cartParamDto);
......@@ -170,6 +198,19 @@ public class ShoppingCartBaseServiceImpl implements ShoppingCartBaseService {
}
}
@Override
public BaseResponse clearMCCafe(CartParamDto cartParamDto, String trackingNo) {
try {
redisTemplate.delete(this.getShoppingCartGoodsKey(cartParamDto));
redisTemplate.delete(this.getShoppingCartGoodsAmountKey(cartParamDto));
redisTemplate.delete(this.getShoppingCartCouponCodeKey(cartParamDto));
return new BaseResponse(VersionUtils.VER_1, CartResponseConstant.SUCCESS.getCode(), CartResponseConstant.SUCCESS.getMessage());
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "clear", cartParamDto, e, Level.ERROR);
return null;
}
}
/**
* 修正购物车中的spu和sku商品信息
*
......@@ -285,6 +326,16 @@ public class ShoppingCartBaseServiceImpl implements ShoppingCartBaseService {
return RedisKeyConstant.SAAS_SHOPPINGCART_KEY_PREFIX + cartParamDto.getPartnerId() + "_" + cartParamDto.getStoreId() + "_" + cartParamDto.getUserId();
}
/**
* 获取记录购物车信息的key
*
* @return
*/
private String getShoppingCartCouponCodeKey(CartParamDto cartParamDto) {
return RedisKeyConstant.SAAS_SHOPPINGCART_COUPON_KEY_PREFIX + cartParamDto.getPartnerId() + "_" + cartParamDto.getStoreId() + "_" + cartParamDto.getUserId();
}
/**
* 获取记录购物车价格的key
*
......
......@@ -17,6 +17,7 @@ import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.enums.QueryOrderAccountType;
import com.freemud.sdk.api.assortment.order.request.order.CreateOrderProductRequest;
import com.freemud.sdk.api.assortment.order.request.order.OrderProductAddInfoDto;
import com.freemud.sdk.api.assortment.order.request.order.OrderSpecialExtraAttrRequest;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
......@@ -184,7 +185,21 @@ public class DeliveryAdapter {
order.getProductList().forEach(productList -> {
ProductInfo deliveryProductInfo = new ProductInfo();
deliveryProductInfo.setProductCode(productList.getProductId());
deliveryProductInfo.setProductName(productList.getProductName());
String productName = StringUtils.isBlank(productList.getSpecificationName()) ? productList.getProductName() : productList.getSpecificationName();
OrderProductAddInfoDto extInfo = JSON.parseObject(productList.getExtInfo(), OrderProductAddInfoDto.class);
if(CollectionUtils.isNotEmpty(extInfo.getSpecialAttrs())) {
String attr = "";
for (OrderSpecialExtraAttrRequest special : extInfo.getSpecialAttrs()) {
if(special.getAttributeName().indexOf("冰") >= 0) {
attr += special.getAttributeName()+",";
}
}
if(attr.length() > 0) {
attr = attr.substring(0, attr.length()-1);
productName += "("+attr+")";
}
}
deliveryProductInfo.setProductName(productName);
deliveryProductInfo.setProductNumber(productList.getNumber());
deliveryProductInfo.setProductPrice(productList.getSalePrice().intValue());
//餐道使用
......@@ -200,7 +215,21 @@ public class DeliveryAdapter {
productList.getComboProduct().forEach(comboProduct -> {
ProductInfo deliveryComboProductInfo = new ProductInfo();
deliveryComboProductInfo.setProductCode(comboProduct.getProductId());
deliveryComboProductInfo.setProductName(comboProduct.getProductName());
String productNameCombo = StringUtils.isBlank(comboProduct.getSpecificationName()) ? comboProduct.getProductName() : comboProduct.getSpecificationName();
OrderProductAddInfoDto extInfoCombo = JSON.parseObject(comboProduct.getExtInfo(), OrderProductAddInfoDto.class);
if(CollectionUtils.isNotEmpty(extInfoCombo.getSpecialAttrs())) {
String attr = "";
for (OrderSpecialExtraAttrRequest special : extInfoCombo.getSpecialAttrs()) {
if(special.getAttributeName().indexOf("冰") >= 0) {
attr += special.getAttributeName()+",";
}
}
if(attr.length() > 0) {
attr = attr.substring(0, attr.length()-1);
productNameCombo += "("+attr+")";
}
}
deliveryComboProductInfo.setProductName(productNameCombo);
deliveryComboProductInfo.setProductNumber(comboProduct.getNumber()/productList.getNumber());
deliveryComboProductInfo.setProductPrice(comboProduct.getSalePrice().intValue());
//餐道使用
......
......@@ -360,6 +360,8 @@ public class QueryOrdersResponseDto {
*/
private String addInfo;
private String extInfo;
/**
* 套餐--type:6
*/
......
......@@ -22,4 +22,5 @@ public class ActivityDiscountsDto {
private Integer discountAmount;
private Integer activityType;
private Integer actualActivityGoodsNumber;
private String tenderId;
}
......@@ -210,6 +210,11 @@ public class ShoppingCartGoodsDto {
* 配料或属性
*/
private List<CartGoodsDetailDto.CartGoodsExtra> extraList = new ArrayList<>(0);
/**
* 配料或属性
*/
private List<CartGoodsDetailDto.CartGoodsExtra> specialExtra = new ArrayList<>(0);
/**
* 商品行享受的促销活动
*/
......@@ -231,6 +236,10 @@ public class ShoppingCartGoodsDto {
* 属性名
*/
private String attributeName;
/**
* 入机code
*/
private String specialCode;
}
......
......@@ -153,6 +153,11 @@ public class CreateOrderVo {
* 券码
*/
private String couponCode;
/**
* 运费券code
*/
private String freightCouponCode;
/**
* 版本号
*/
......
......@@ -54,6 +54,10 @@ public class ShoppingCartInfoRequestVo {
*/
private String couponCode;
/**
* 运费券code
*/
private String freightCouponCode;
/**
* 优惠券对应的活动号
*/
private String activityCode;
......
......@@ -16,6 +16,7 @@ public enum CouponReqTypeEnum {
QUERY(0,"查询"),
CANCEL_REDEEM(3,"冲正"),
REDEEM(71,"核销"),
BATCH_QUERY(88,"批量查询"),
LOCK(89,"锁定"),
UNLOCK(90,"解锁"),
;
......
......@@ -17,7 +17,9 @@ public enum ProductType {
HAVESPEC(10, "有规格"),
SETMEALPRODUCT(6,"套餐商品"),
SETMEALPRODUCT_UPPRICE(7,"加价套餐商品"),
MATERIALPRODUCT_UPPRICE(88,"加料商品");
MATERIALPRODUCT_UPPRICE(88,"加料商品"),
LITTLE_MATERIAL_PRODUCT(89,"小料"),
;
private int code;
......
......@@ -23,6 +23,7 @@ public class ServiceException extends RuntimeException {
public ServiceException(ResponseResult result, String message) {
this.result = result;
this.message = message;
this.result.setMessage(message);
}
public ResponseResult getResult() {
......
......@@ -240,7 +240,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
// 查询用户信息,余额购物车校验
AssortmentCustomerInfoVo userLoginInfoDto = checkMCCafeOrder.checkOrderByMember(createOrderVo, trackingNo);
// 查询购物车(内部校验券点餐方式,券是否可用) 校验当前订单类型的下单参数
ShoppingCartGoodsDto shoppingCartGoodsDto = checkMCCafeOrder.getMCCafeShoppingCartGoodsDto(createOrderVo);
ShoppingCartGoodsDto shoppingCartGoodsDto = checkMCCafeOrder.getMCCafeShoppingCartGoodsDto(createOrderVo, userLoginInfoDto);
// 查询门店信息 营业时间、营业状态,服务器当前时间在营业时间内
StoreResponse.BizVO storeResponseDto = checkMCCafeOrder.checkOrderByStore(createOrderVo, trackingNo);
// 查询小程序自提外卖配置信息 校验当前订单类型的下单参数 校验外卖是否满足起送条件
......
......@@ -911,7 +911,7 @@ public class OrderServiceImpl implements Orderservice {
QueryOrdersRequest queryOrdersRequest2 = new QueryOrdersRequest();
BeanUtil.convertBean(queryOrdersDto, queryOrdersRequest2);
queryOrdersRequest2.setTrackingNo(LogTreadLocal.getTrackingNo());
queryOrderResponse = orderCenterSdkService.queryOrders(queryOrdersRequest2);
queryOrderResponse = orderCenterSdkService.queryMCCafeOrders(queryOrdersRequest2);
} catch (Exception e) {
LogUtil.error("queryOrders_error", gson.toJson(queryOrdersDto), e);
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
......@@ -1277,7 +1277,7 @@ public class OrderServiceImpl implements Orderservice {
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(oid);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
QueryOrderByIdResponse response = orderCenterSdkService.queryMCCafeOrderById(baseQueryOrderRequest);
if (!RESPONSE_SUCCESS_CODE.equals(response.getErrcode()) || response.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
......
......@@ -2,6 +2,7 @@ package cn.freemud.service.mccafe;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse;
......@@ -26,6 +27,8 @@ public interface CouponClientService {
CouponQueryResponse query(MCCafeCouponRequest mcCafeCouponRequest);
McdNetBatchQueryResponse batchQuery(MCCafeCouponRequest mcCafeCouponRequest);
CouponBaseResponse lock(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts);
CouponBaseResponse lock(MCCafeCouponLockRequest mcCafeCouponLockRequest);
......
......@@ -14,6 +14,7 @@ import cn.freemud.management.entities.dto.request.order.MCCafeProductRedeemVo;
import cn.freemud.management.entities.dto.request.order.MCCafeTransactionVo;
import cn.freemud.enums.CouponReqTypeEnum;
import cn.freemud.enums.MCCafeChannelEnum;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import cn.freemud.management.thirdparty.CouponOfflineMCCafeClient;
import cn.freemud.service.mccafe.CouponClientService;
import cn.freemud.utils.LogUtil;
......@@ -210,6 +211,11 @@ public class CouponClientServiceImpl implements CouponClientService {
}
@Override
public McdNetBatchQueryResponse batchQuery(MCCafeCouponRequest mcCafeCouponRequest) {
return couponOfflineMCCafeClient.batchQuery(mcCafeCouponRequest);
}
@Override
public CouponBaseResponse lock(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts) {
if (null == orderBean || CollectionUtils.isEmpty(accounts)) {
return null;
......
......@@ -104,7 +104,7 @@ public class MCCafeOrderCenterSdkServiceImpl implements MCCafeOrderCenterSdkServ
@Override
public CreateOrderResponse createMCCafeOrderFlow(CreateOrderRequest config) {
com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderRequest request = orderSdkAdapter.convent2NEWCreateOrderRequest(config.getBaseCreateOrderRequest());
com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderRequest request = orderSdkAdapter.convent2NEWCreateMCCafeOrderRequest(config.getBaseCreateOrderRequest());
com.freemud.application.sdk.api.ordercenter.response.BaseResponse<OrderInfoReqs> order = orderSdkService.createOrder(request, config.getTrackingNo());
CreateOrderResponse createOrderResponse = orderSdkAdapter.convent2NEWOrderInfoReqs(order);
if (!RESPONSE_SUCCESS.equals(createOrderResponse.getErrcode())
......
......@@ -2,14 +2,18 @@ package cn.freemud.service;
import cn.freemud.OrderApplication;
import cn.freemud.base.constant.Version;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.CancelDeliveryRequest;
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.enums.MCCafeChannelEnum;
import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.UserLoginChannelEnum;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.order.*;
import cn.freemud.entities.dto.delivery.CancelDeliveryResponseDto;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import cn.freemud.management.thirdparty.CouponOfflineMCCafeClient;
import cn.freemud.service.mccafe.thirdparty.DeliveryFeiginMCCafeClient;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse;
......@@ -18,6 +22,7 @@ import cn.freemud.enums.CouponReqTypeEnum;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.request.UpdateDownstreamOrderCodeReq;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import org.apache.commons.collections4.CollectionUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -25,6 +30,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
......@@ -133,9 +139,9 @@ public class CouponActivityServiceTest {
couponCodeVerificationDto.setPartnerId("1206");
couponCodeVerificationDto.setStoreId("99992");
// 订单号
couponCodeVerificationDto.setTransId("18579931215294931300003");
couponCodeVerificationDto.setOfferId("297933023371288");
couponCodeVerificationDto.setCoupon("297933023371288");
couponCodeVerificationDto.setTransId("18579931215294931300006");
couponCodeVerificationDto.setOfferId("224368493682038");
couponCodeVerificationDto.setCoupon("224368493682038");
couponCodeVerificationDto.setNumber("1");
couponCodeVerificationDto.setChannel("mocoffee_wx");
couponCodeVerificationDto.setOperatorId("1");
......@@ -196,4 +202,41 @@ public class CouponActivityServiceTest {
System.out.println(linkedHashMap.get("downstreamThirdOrderCode"));
}
@Test
public void batchQueryTest() {
MCCafeCouponRequest mcCafeCouponRequest = MCCafeCouponRequest.builder()
.ver(Integer.valueOf(Version.VERSION_1))
.reqtype(CouponReqTypeEnum.QUERY.getCode())
.partnerId(1206)
.store_id("khl-12345")
.station_id("1")
.operator_id("1")
.channel("mocoffee_wx")
.couponlist(Arrays.asList(new MCCafeCouponVo("229382080857268"),new MCCafeCouponVo("212791286228799"),new MCCafeCouponVo("224368493682038")))
.sign("skip")
.build();
System.out.println(JSON.toJSONString(mcCafeCouponRequest));
McdNetBatchQueryResponse mcdNetBatchQueryResponse = offlineMCCafeClient.batchQuery(mcCafeCouponRequest);
System.out.println(JSON.toJSONString(mcdNetBatchQueryResponse));
if (mcdNetBatchQueryResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS.equals(mcdNetBatchQueryResponse.getStatusCode())
|| CollectionUtils.isEmpty(mcdNetBatchQueryResponse.getCouponlist())) {
LogUtil.error("部分优惠券当前不可用", mcCafeCouponRequest, mcdNetBatchQueryResponse);
throw new ServiceException(ResponseResult.COUPON_SHOP_NOTSUPPORT, "部分优惠券当前不可用");
} else {
mcdNetBatchQueryResponse.getCouponlist().forEach(o -> {
if(!ResponseCodeConstant.RESPONSE_SUCCESS.equals(o.getStatusCode())) {
if(o.getCodeInfo() != null) {
LogUtil.error(o.getCodeInfo().getAct_name()+"当前不可用", mcCafeCouponRequest, mcdNetBatchQueryResponse);
throw new ServiceException(ResponseResult.COUPON_SHOP_NOTSUPPORT, o.getCodeInfo().getAct_name()+"当前不可用");
} else {
LogUtil.error("部分优惠券暂时不可用", mcCafeCouponRequest, mcdNetBatchQueryResponse);
throw new ServiceException(ResponseResult.COUPON_SHOP_NOTSUPPORT, "部分优惠券暂时不可用");
}
}
});
}
}
}
\ No newline at end of file
package cn.freemud.service.impl;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.OrderAffirmRequestVO;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.utils.ValidationCode;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
......@@ -24,6 +30,9 @@ public class MallOrderServiceImplTest {
@Autowired
private MallOrderServiceImpl mallOrderService;
@Autowired
private MCCafeOrderServiceImpl mcCafeOrderService;
@Before
public void before() throws Exception {
......@@ -33,6 +42,14 @@ public class MallOrderServiceImplTest {
public void after() throws Exception {
}
@Test
public void f1() {
mcCafeOrderService.createOrder(JSON.parseObject("{\"channelType\":\"saas\",\"couponCode\":\"\",\"menuType\":\"saasdelivery\",\"needInvoice\":0,\"needTableware\":0,\"orderRemark\":\"\",\"orderType\":2,\"partnerId\":\"1206\",\"payChannelType\":1,\"receiveId\":\"3599568180562003060\",\"sessionId\":\"c4377678dbcbd6cdf6e7df86ea112b6f82723023\",\"shopId\":\"1450026\",\"takeMealFlag\":\"0\"}", CreateOrderVo.class),
new StoreResponse.BizVO(),
JSON.parseObject("{\"activityDiscountsDtos\":[],\"deliveryAmount\":10,\"discountDeliveryAmount\":10,\"isDiscountDelivery\":false,\"originalTotalAmount\":4400,\"packageAmount\":0,\"products\":[{\"activityDiscountsDtos\":[],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"cartGoodsUid\":\"eb8c7260-8ecb-44d1-9234-8d8bed0b0875\",\"classificationId\":\"\",\"classificationName\":\"\",\"comboProducts\":[{\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"customerCode\":\"501642\",\"extraList\":[],\"hasProductCoupon\":false,\"isFixedProduct\":false,\"materialList\":[],\"originalPrice\":1700,\"parentProductId\":\"184437853099519288\",\"picture\":\"https://picture.sandload.cn/1598678546485.png\",\"productType\":6,\"qty\":2,\"skuId\":\"184437494035639613\",\"skuName\":\"中杯热美式\",\"spuId\":\"184437494035639613\",\"spuName\":\"中杯热美式\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0},{\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"customerCode\":\"901290\",\"extraList\":[],\"hasProductCoupon\":false,\"isFixedProduct\":false,\"materialList\":[],\"originalPrice\":500,\"parentProductId\":\"184437853099519288\",\"picture\":\"https://picture.sandload.cn/1598677404074.png\",\"productType\":6,\"qty\":2,\"skuId\":\"184436294373469463\",\"skuName\":\"经典芝士蛋糕\",\"spuId\":\"184436294373469463\",\"spuName\":\"经典芝士蛋糕\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0}],\"customerCode\":\"901280\",\"extraList\":[],\"hasProductCoupon\":false,\"materialList\":[],\"originalPrice\":4400,\"picture\":\"https://picture.sandload.cn/1598678861518.png\",\"productCode\":\"901280\",\"productType\":6,\"qty\":2,\"salePrice\":4400,\"skuId\":\"184437853099519288\",\"skuName\":\"早餐啡常搭\",\"spuId\":\"184437853099519288\",\"spuName\":\"早餐啡常搭\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0}],\"shareDiscountActivityDtos\":[],\"totalAmount\":4400,\"totalDiscountAmount\":0}", ShoppingCartGoodsDto.class),
new OrderExtendedReq(),
OrderClientType.SAAS,"www");
}
@Test
public void testPaySuccess() {
......
......@@ -104,4 +104,6 @@ public class MCCafeCouponRequest {
private Boolean isManual;
private String channel;
private List<MCCafeCouponVo> couponlist;
}
package cn.freemud.management.entities.dto.request.order;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
@Data
@AllArgsConstructor
public class MCCafeCouponVo {
private String coupon;
}
package cn.freemud.management.entities.dto.response.coupon;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
public class MccofeBaseResponse implements Serializable {
public Integer statusCode;
public String msg;
public String act_id;
public Integer ver = 1;
public MccofeBaseResponse(Integer statusCode, String msg) {
this.statusCode = statusCode;
this.msg = msg;
}
}
package cn.freemud.management.entities.dto.response.coupon;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@Data
public class McdNetBatchQueryResponse extends MccofeBaseResponse {
private List<Coupon> couponlist;
/**
* 响应描述
*/
private String content;
@AllArgsConstructor
@NoArgsConstructor
@Data
public static class Coupon {
private Integer statusCode;
private String msg;
private Integer couponType;
private String code;
private McdNetCouponInfoRespDto codeInfo;
}
}
package cn.freemud.management.entities.dto.response.coupon;
import lombok.Data;
import java.util.List;
/**
* 麦当劳.net券详情响应对象
* <p>
* 此对象和.net接口保持一致
*
* @author Tony
*/
@Data
public class McdNetCouponInfoRespDto {
/**
* 活动编号
*/
private String act_id;
/**
* 活动名称
*/
private String act_name;
/**
* 活动描述
*/
private String act_desc;
/**
* 优惠券过期时间
*/
private String vdata;
/**
* 优惠券编号
*/
private String code;
private String start_time;
private String end_time;
/**
* 优惠券渠道商编号
*/
private String ebcode;
/**
* 优惠券渠道商名称
*/
private String ebname;
/**
* 最低消费金额,单位是分,代金券或者折扣券返回、
* 满减券满的金额;
* 满免券满的金额;
*/
private Integer minamount;
/**
* 代金券金额,单位是分
* 只有代金券时返回;
* 满减券减的金额;
*/
private Integer amount;
/**
* 满免券最低消费的商品数量
*/
private Integer min_product_amount;
/**
* 折扣编码
*/
private String promotion_type;
/**
* 平台编码
*/
private String platformitemid;
/**
* 可用次数
*/
private Integer availableTimes;
/**
* 当天可用次数
*/
private Integer limitTimes;
/**
* 折扣券折扣百分比,7.5折 = 75
*/
private Integer percent_discount;
/**
* 券状态
*/
private Integer status;
/**
* 只有商品券时返回
*/
private List<McdNetCouponProductRespDto> products;
}
package cn.freemud.management.entities.dto.response.coupon;
import lombok.Data;
/**
* 麦当劳.net支付信息响应对象
* <p>
* 此对象和.net接口保持一致
*
* @author Tony
*/
@Data
public class McdNetCouponPaymentRespDto {
/**
* 线上已付金额,以分为单位
*/
private Integer paid;
/**
* 线下需要收取的金额,以分为单位
*/
private Integer remaining;
}
package cn.freemud.management.entities.dto.response.coupon;
import lombok.Data;
/**
* 麦当劳.net商品信息响应对象
* <p>
* 此对象和.net接口保持一致
*
* @author Tony
*/
@Data
public class McdNetCouponProductRespDto {
/**
* 商户商品编号(或键位编号)
*/
private String pid;
/**
* 商品自增id
*/
private String mcd_productCode;
/**
* 商品名称
*/
private String name;
/**
* 商品数量
*/
private Integer amount;
/**
* 可用商品个数
*/
private Integer number;
/**
* 商品折扣价,以分为单位
*/
private Integer price_act;
/**
* 商品原价
*/
private Integer price_original;
/**
* 支付信息
*/
private McdNetCouponPaymentRespDto payment;
}
......@@ -2,6 +2,7 @@ package cn.freemud.management.thirdparty;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponLockRequest;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse;
......@@ -22,6 +23,9 @@ public interface CouponOfflineMCCafeClient {
@PostMapping("/mccafe/query")
CouponQueryResponse query(MCCafeCouponRequest mcCafeCouponRequest);
@PostMapping("/mccafe/batchQuery")
McdNetBatchQueryResponse batchQuery(MCCafeCouponRequest mcCafeCouponRequest);
@PostMapping("/mccafe/lock")
CouponBaseResponse lock(MCCafeCouponLockRequest MCCafeCouponLockRequest);
......
......@@ -23,7 +23,9 @@ public enum ProductTypeEnum {
MORD_SPECIFICATION_PRODUCT(10,"多规格商品"),
WEIGHT_PRODUCT(11,"称重商品"),
TABLEWARE_PRODUCT(12,"餐具商品"),
MATERIAL_PRODUCT(88,"加料商品");
MATERIAL_PRODUCT(88,"加料商品"),
LITTLE_MATERIAL_PRODUCT(89,"小料"),
;
......
......@@ -154,6 +154,8 @@ public class ActivityCalculationDiscountResponseDto {
private Integer type;
private Long thresholdAmount;
private String tenderId;
}
@Data
......
......@@ -21,6 +21,7 @@ public class ActivityDiscountsDto {
private String activityName;
private Integer discountAmount;
private Integer activityType;
private String tenderId;
/**
* 实际参与活动商品数量
......
......@@ -124,4 +124,9 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
* 配送费为零的原因:0:正常,1:超出配送范围
*/
private Integer deliveryFeeZeroReason;
/**
* 代金券
*/
private String couponCode;
}
......@@ -19,6 +19,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.request.GetProductInfoRequest;
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -108,6 +109,25 @@ public class AssortmentSdkService {
}
/**
* 调用聚合sdk获取缓存中购物车代金券信息
*
* @param partnerId
* @param storeId
* @param useId
* @return
*/
public String getShoppingCartCoupon(String partnerId, String storeId, String useId, ShoppingCartBaseService shoppingCartService) {
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = getCartParamDto(partnerId, storeId, useId);
BaseResponse<String> baseResponse = shoppingCartService.getCartCouponCode(cartParamDto, LogThreadLocal.getTrackingNo());
if (baseResponse == null || !ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode()) || StringUtils.isEmpty(baseResponse.getResult())) {
return "";
}
return baseResponse.getResult();
}
/**
* 调用聚合sdk设置缓存中购物车信息
*
* @param partnerId
......@@ -128,6 +148,25 @@ public class AssortmentSdkService {
return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CartGoods.class);
}
/**
* 调用聚合sdk设置缓存中购物车代金券
*
* @param partnerId
* @param storeId
* @param useId
* @return
*/
public List<CartGoods> setShoppingCartCouponCode(String partnerId, String storeId, String useId, String couponCode, ShoppingCartBaseService shoppingCartService) {
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = getCartParamDto(partnerId, storeId, useId);
cartParamDto.setCouponCode(couponCode);
BaseResponse<String> baseResponse = shoppingCartService.setCartCouponCode(cartParamDto, LogThreadLocal.getTrackingNo());
if (baseResponse == null || !ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode())) {
return null;
}
return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CartGoods.class);
}
/**
......
......@@ -19,6 +19,7 @@ import cn.freemud.service.impl.FullSubtractionActivityServiceImpl;
import cn.freemud.service.impl.mcoffee.calculation.CalculationServiceImpl;
import cn.freemud.service.impl.mcoffee.calculation.CouponDiscountCalculation;
import cn.freemud.service.impl.mcoffee.entity.CopyShoppingCartRequestVo;
import cn.freemud.service.impl.mcoffee.entity.CouponState;
import cn.freemud.service.impl.mcoffee.entity.MCoffeeAddGoodsRequestVo;
import cn.freemud.service.impl.mcoffee.entity.SwitchShoppingCartRequestVo;
import cn.freemud.service.thirdparty.CustomerApplicationClient;
......@@ -37,6 +38,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
......@@ -313,6 +315,30 @@ public class ShoppingCartMCoffeeServiceImpl {
// 重新存储最新购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, sessionId, "", shoppingCartBaseService);
}
/**
* 如果couponCode为空,则从缓存里尝试获取
* 如果couponCode不为空,则设置到缓存里
*/
if(StringUtils.isEmpty(couponCode)) {
couponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService);
if(StringUtils.isNotEmpty(couponCode)) {
List<CouponState> couponStates = couponDiscountCalculation.buildAvailableCoupons(cartGoodsList, partnerId, storeId, Lists.newArrayList(couponCode));
if(CollectionUtils.isNotEmpty(couponStates)) {
if(Objects.equals(couponStates.get(0).getState(), CouponStateEnum.STATE_1.getCode())) {
couponCode = "";
}
} else {
couponCode = "";
}
}
} else {
if("remove".equals(couponCode)) {
couponCode = "";
}
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, couponCode, shoppingCartBaseService);
}
// 当couponCode不为空时,需参与价格计算
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = getCoupon(couponCode, null, cartGoodsList);
......@@ -322,6 +348,7 @@ public class ShoppingCartMCoffeeServiceImpl {
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
shoppingCartGoodsResponseVo.setCouponCode(couponCode);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
......@@ -397,7 +424,7 @@ public class ShoppingCartMCoffeeServiceImpl {
String partnerId = shoppingCartClearRequestVo.getPartnerId();
String storeId = shoppingCartClearRequestVo.getShopId();
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = assortmentSdkService.getCartParamDto(partnerId, storeId, userId);
shoppingCartBaseService.clear(cartParamDto, LogThreadLocal.getTrackingNo());
shoppingCartBaseService.clearMCCafe(cartParamDto, LogThreadLocal.getTrackingNo());
if (ObjectUtils.equals(shoppingCartClearRequestVo.getOperationType(), OperationTypeEnum.PAY_SUCCESS.getOperationType())) {
return ResponseUtil.success();
}
......
......@@ -199,6 +199,7 @@ public class CalculationServiceImpl {
activityDiscountsDto.setActivityName(discount.getActivityName());
activityDiscountsDto.setActivityType(discountType);
activityDiscountsDto.setDiscountAmount(0 - discountAmount);
activityDiscountsDto.setTenderId(discount.getTenderId());
activityDiscountsDtos.add(activityDiscountsDto);
}
}
......
......@@ -279,7 +279,7 @@ public class CouponDiscountCalculation {
private List<CouponState> buildAvailableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes) {
public List<CouponState> buildAvailableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes) {
// String appSecret = getAppSecret(partnerId);
// 最大15一提交
int maxNum = 15;
......
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