Commit 11dde846 by xiaoer.li@freemud.com

Merge branch 'develop' of…

Merge branch 'develop' of http://gitlab.freemud.com/order-group-application/order-group into develop

 Conflicts:
	.gitignore
	assortment-ordercenter-sdk/readme.md
	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
	assortment-shoppingcart-sdk/pom.xml
	order-application-service/pom.xml
	order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
	order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
	order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
	order-application-service/src/main/java/cn/freemud/service/thirdparty/DeliveryFeiginClient.java
	order-management/src/main/java/cn/freemud/management/service/handle/OrderVerifyHandle.java
	ordercenter-sdk/readme.md
	shopping-cart-application-service/pom.xml
	shopping-cart-application-service/src/main/java/cn/freemud/enums/GoodsTypeEnum.java
parents 79e17cba 7bb054a5
......@@ -261,7 +261,7 @@ public class OrderSdkAdapter {
if (null != requestVO && null != requestVO.getOtherInfo()) {
request.setExtInfo(JSONObject.toJSONString(requestVO.getOtherInfo()));
}
request.setOrderPayItemCreateReqList(requestVO.getOrderPayItemCreateReqList());
return request;
}
......
......@@ -2,6 +2,7 @@ package com.freemud.sdk.api.assortment.order.request.order;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderPayItemCreateReq;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderTaskReq;
import com.freemud.application.sdk.api.promotioncenter.request.promotion.ActivityUpdateStockRequest;
import com.freemud.sdk.api.assortment.order.config.BaseConfig;
......@@ -163,7 +164,6 @@ public class BaseCreateOrderRequest extends BaseConfig {
private String region;
private Byte payChannelType;
/**
* 收货地址Id
*/
......@@ -208,5 +208,6 @@ public class BaseCreateOrderRequest extends BaseConfig {
*/
private String ruleId;
}
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
}
......@@ -65,6 +65,12 @@ public class ConfirmOrderRequest extends BaseConfig {
*/
private String endTransId;
/**
* 取餐码类型
*/
private String mealCodeRule;
@Data
public static class OrderSettlement{
/**
......
......@@ -166,13 +166,15 @@ public class CreateOrderProductRequest extends BaseConfig {
/** 是否主食**/
private Integer stapleFood;
/** 商品统计分类编号**/
private String classificationId;
private String classificationName;
private String category;
/** 商品税率**/
private double tax;
private String taxId;
/** 商品统计分类编号**/
private String classificationId;
private String classificationName;
}
package com.freemud.sdk.api.assortment.order.request.payment;
import lombok.Data;
@Data
public class PayPlatformVO {
private String ebcode;
private Long amount;
}
package com.freemud.sdk.api.assortment.order.request.payment;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ProductVO {
private String id;
private BigDecimal quantity;
private Integer seq;
private Long price;
private String name;
private String salesType = "NORMAL";
}
package com.freemud.sdk.api.assortment.order.request.payment;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import lombok.Data;
import java.util.List;
@Data
public class UnifiedOrderApplicationRequest {
private List<PayPlatformVO> platforms;
private String openId;
private String notifyUrl;
private Integer invoiceFlag;
private Long amount;
private Long vipAmount;
private Long undisAmount;
private String body;
private String outOrderNo;
private List<ProductVO> products;
private String goodsTag;
private String partnerId;
private String storeId;
private String businessDate;
private String stationId = "1";
private String operatorId = "1";
private String transId;
private String foodOrderType;
private String appId;
private String payCode;
private String payTimeOutTime;
private String ebCode;
}
......@@ -307,6 +307,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
request.setPayRequestNo(confirmOrderRequest.getPayVoucher());
request.setCompleteOrderCode(confirmOrderRequest.getCompleteOrderCode());
request.setOrderCode(confirmOrderRequest.getOrderId());
request.setMealCodeRule(confirmOrderRequest.getMealCodeRule());
// 引入门店基础服务 查询自动制作完成配置时间,预约单单独超时任务设置
request.setTimeout(getPaySuccessTimeout(confirmOrderRequest,request));
......
......@@ -42,7 +42,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>productcenter-sdk</artifactId>
<version>3.6.5.SNAPSHOT</version>
<version>3.7.6-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
......@@ -54,6 +54,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId>
<version>1.5.2.RELEASE</version>
<version>1.4.4-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
......
......@@ -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前缀
......
......@@ -33,6 +33,19 @@ public class ShoppingCartConstant {
public final static String ONE_TRADE_CAN_ONLY_USE_ONE_GOODS_COUPON = "一笔交易仅允许同时使用一张商品券";
public final static String ORDER_WAY_CHANGE = "切换点餐方式,商品库存和价格等可能会发生变化。";
/**
* 商品价格校验失败
*/
public static final int PRODUCT_PRICE_CHANGE = 102;
/**
* 商品不存在
*/
public static final int PRODUCT_NOTFOUND= 103;
/**
* 商品状态校验失败
*/
public static final int PRODUCT_DOWN= 104;
}
......@@ -34,6 +34,8 @@ public class CartParamDto {
private String cartGoodsUid;
private String couponCode;
private Integer qty;
private MealClearOperationEnum operationType;
......
......@@ -48,6 +48,8 @@ import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.freemud.sdk.api.assortment.shoppingcart.constant.ShoppingCartConstant.*;
/**
* All rights Reserved, Designed By www.freemud.cn
*
......@@ -77,6 +79,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
......@@ -84,6 +96,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;
}
......@@ -96,6 +118,14 @@ public interface ShoppingCartBaseService {
BaseResponse clear(CartParamDto cartParamDto, String trackingNo);
/**
* 清除麦咖啡购物车商品行信息
*
* @param cartParamDto
*/
default BaseResponse clearMCCafe(CartParamDto cartParamDto, String trackingNo) {
return null;
}
/**
* 获取商品详细信息
*
* @param getProductInfoRequest
......@@ -194,6 +224,88 @@ public interface ShoppingCartBaseService {
}
}
default BaseResponse<CheckCartRequest> checkAllCartGoodsForMCoffee(CheckCartRequest checkCartRequest) {
ShoppingCartAdapter shoppingCartAdapter = SDKCommonBaseContextWare.getBean(ShoppingCartAdapter.class);
ProductService productService = SDKCommonBaseContextWare.getBean(ProductService.class);
try {
ValidateShopProductRequest validateShopProductRequest = shoppingCartAdapter.getValidateShopProductRequest(checkCartRequest);
com.freemud.application.sdk.api.base.BaseResponse<ValiadShopProductResponse> valiadResponse = productService.validateShopProductAboutReason(validateShopProductRequest);
//TODO 疑问
if (valiadResponse == null || !CartResponseConstant.SUCCESS.getCode().equals(valiadResponse.getCode()) || valiadResponse.getData()==null) {
checkCartRequest.getCartGoodsList().clear();
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(valiadResponse.getMessage(),checkCartRequest);
}
ValiadShopProductResponse validateResult = valiadResponse.getData();
//非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示
if (CollectionUtils.isNotEmpty(validateResult.getFailureList())){
for (int i = 0; i < validateResult.getFailureList().size(); i++) {
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
switch (validateResult.getFailureList().get(i).getCode()){
case PRODUCT_PRICE_CHANGE :
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_ACTIVITY_CHANGE);
break;
case PRODUCT_NOTFOUND:
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_EMPTY_GOODS_LIST);
break;
case PRODUCT_DOWN:
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALID_GOODS_EXIST);
break;
default:
break;
}
// return CartResponseUtil.error(valiadResponse.getMessage(),checkCartRequest);
}
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
for (CartGoods cartGoods :checkCartRequest.getCartGoodsList()) {
if (validateResult.getFailureList().stream().anyMatch(f->cartGoods.getCartGoodsUid().equals(f.getUuid()))){
cartGoods.setCartGoodsUid(null);
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
}
}
checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid()));
}
List<ProductBeanDTO> productList = validateResult.getSuccessList().stream().map(ValiadShopProductResult::getProductType).collect(Collectors.toList());
CartGoodsStates cartGoodsStates = new CartGoodsStates();
for (CartGoods cartGoods : checkCartRequest.getCartGoodsList()) {
// 当goodsId为空或商品是商品券时直接跳过
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType())) {
continue;
}
shoppingCartAdapter.updateCartGoodsInfoNew(cartGoods, productList);
}
//校验商品券是否有当前点餐方式
cartGoodsStates = updateSpqCartGoodsInfo(checkCartRequest.getCartGoodsList(), checkCartRequest.getOrderWay(), checkCartRequest.getPartnerId(), checkCartRequest.getTrackingNo(), cartGoodsStates
, checkCartRequest.getStoreId());
// 点餐方式改变商品券发生变动
if (cartGoodsStates != null && cartGoodsStates.isOrderWayFlag()) {
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.ORDER_WAY_CHANGE);
}
//若商品详情赋值有异常,直接移除购物车
if (checkCartRequest.getCartGoodsList().stream().anyMatch(cart -> StringUtils.isEmpty(cart.getCartGoodsUid()))) {
checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid()));
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
}
//todo 小料
if (checkCartRequest.getCartGoodsList().stream().anyMatch(cart -> cart.getGoodsType().equals(GoodsTypeEnum.EXCEPTION_GOODS.getGoodsType()))) {
checkCartRequest.getCartGoodsList().removeIf(k -> k.getGoodsType().equals(GoodsTypeEnum.EXCEPTION_GOODS.getGoodsType()));
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_MATERIAL_ERROR);
}
return CartResponseUtil.success(checkCartRequest);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", checkCartRequest.getTrackingNo(), e.getMessage(), "checkAllCartGoods", checkCartRequest, e, Level.ERROR);
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(e.getMessage(),checkCartRequest);
}
}
/**
......
......@@ -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
*
......
......@@ -41,6 +41,18 @@
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.0.16-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>ordercenter-sdk</artifactId>
<groupId>cn.freemud</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<artifactId>ordercenter-sdk</artifactId>
<groupId>cn.freemud</groupId>
<version>1.4.37-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......@@ -77,7 +89,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>deliverycenter-sdk</artifactId>
<version>1.5.RELEASE</version>
<version>1.5.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......@@ -320,7 +332,7 @@
<dependency>
<groupId>com.freemud.sdk.api.assortment</groupId>
<artifactId>assortment-payment-sdk</artifactId>
<version>2.6.1-SNAPSHOT</version>
<version>2.6.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
......
......@@ -113,7 +113,13 @@ public class DeliveryAdapter {
deliveryOrderRequestDto.setDepatchWeight(order.getWeight());
//deliveryOrderRequestDto.setSerialNumber(order.getOtherCode());
deliveryOrderRequestDto.setOrderId(order.getOid());
deliveryOrderRequestDto.setOrderRemark(order.getRemark());
JSONObject json = JSON.parseObject(order.getExtInfo());
String needTableWare = json.getString("needTableware");
if("0".equals(needTableWare)) {
deliveryOrderRequestDto.setOrderRemark("无需餐具(刀、叉、勺),"+order.getRemark());
} else {
deliveryOrderRequestDto.setOrderRemark("需要餐具(刀、叉、勺),"+order.getRemark());
}
deliveryOrderRequestDto.setOrderTotalAmount(order.getAmount().intValue());
deliveryOrderRequestDto.setOrderActualAmount(order.getAmount().intValue());
deliveryOrderRequestDto.setPartnerId(order.getCompanyId());
......@@ -180,7 +186,7 @@ public class DeliveryAdapter {
deliveryProductInfo.setProductCode(productList.getProductId());
deliveryProductInfo.setProductName(productList.getProductName());
deliveryProductInfo.setProductNumber(productList.getNumber());
deliveryProductInfo.setProductPrice(productList.getPrice().intValue());
deliveryProductInfo.setProductPrice(productList.getSalePrice().intValue());
//餐道使用
deliveryProductInfo.setCumulatedTotal(productList.getNumber() * productList.getPrice().intValue());
OrderProductAddInfoDto orderProductAddInfoDto = JSON.parseObject(productList.getAddInfo(), OrderProductAddInfoDto.class);
......@@ -196,14 +202,15 @@ public class DeliveryAdapter {
deliveryComboProductInfo.setProductCode(comboProduct.getProductId());
deliveryComboProductInfo.setProductName(comboProduct.getProductName());
deliveryComboProductInfo.setProductNumber(comboProduct.getNumber());
deliveryComboProductInfo.setProductPrice(comboProduct.getPrice().intValue());
deliveryComboProductInfo.setProductPrice(comboProduct.getSalePrice().intValue());
//餐道使用
deliveryComboProductInfo.setCumulatedTotal(comboProduct.getNumber() * comboProduct.getPrice().intValue());
OrderProductAddInfoDto orderComboProductAddInfoDto = JSON.parseObject(comboProduct.getAddInfo(), OrderProductAddInfoDto.class);
deliveryComboProductInfo.setTaxId(StringUtils.isNotEmpty(orderComboProductAddInfoDto.getTaxId()) ? orderComboProductAddInfoDto.getTaxId() : "10");
deliveryComboProductInfo.setTaxRate(orderComboProductAddInfoDto.getTax() > 0 ? orderComboProductAddInfoDto.getTax() : 6);
deliveryComboProductInfo.setParentCode(Long.valueOf(comboProduct.getParentProductId().split("_")[0]));
deliveryComboProductInfo.setParentCode(Long.valueOf(comboProduct.getParentProductId().replace("_", "")));
deliveryProductInfo.setProductCode(deliveryComboProductInfo.getParentCode()+"");
productInfos.add(deliveryComboProductInfo);
});
......
......@@ -36,9 +36,11 @@ import cn.freemud.enums.PayStatus;
import cn.freemud.enums.QueryOrderStatus;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.request.wechat.dto.SignMessageBuilder;
import cn.freemud.service.impl.OrderCommonService;
import cn.freemud.utils.*;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerWxappConfig;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
......@@ -51,11 +53,15 @@ import com.freemud.application.sdk.api.ordercenter.enums.OrderSettlementType;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
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.create.OrderPayItemCreateReq;
import com.freemud.application.sdk.api.promotioncenter.dto.promotion.GoodsStockDTO;
import com.freemud.application.sdk.api.promotioncenter.request.promotion.ActivityUpdateStockRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.enums.*;
import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.request.payment.PayPlatformVO;
import com.freemud.sdk.api.assortment.order.request.payment.ProductVO;
import com.freemud.sdk.api.assortment.order.request.payment.UnifiedOrderApplicationRequest;
import com.freemud.sdk.api.assortment.order.response.order.CreateOrderFlowResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
......@@ -71,6 +77,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.FastDateFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.awt.geom.Point2D;
......@@ -78,7 +85,9 @@ import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -86,8 +95,11 @@ import static cn.freemud.constant.OrderRefundConstant.ALLOW_REFUND;
@Component
public class OrderAdapter {
private static FastDateFormat yyyyMMddHHmmss = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
public final static String TAKECODEKEY = "takecode";
public static final String REDIS_KEY_SEP = ":";
public static final String numberChar = "0123456789";
public static final String numberCharWithoutZero = "12345";
private static String SPMCHID = "1237482502";
// private static String SPWXAPPID = "wx8244c7c48c7d45de";
......@@ -120,9 +132,13 @@ public class OrderAdapter {
// private RedisCache redisCache;
@Autowired
private OrderCommonService orderCommonService;
@Autowired
private RedisTemplate redisTemplate;
private static Gson gson = new Gson();
@Autowired
private RedisCache redisCache;
/**
* @param createOrderVo
* @param shoppingCartGoodsDto
......@@ -176,6 +192,13 @@ public class OrderAdapter {
.accountType(getQueryOrderAccountType(getOrderAccountType(activityDiscountsDto.getActivityType())))
.sequence(orderAccountIndex++)
.build();
if(mcCafePartnerId.equals(createOrderDto.getCompanyId())
&& (ActivityTypeEnum.TYPE_11.getCode().equals(activityDiscountsDto.getActivityType())
|| ActivityTypeEnum.TYPE_12.getCode().equals(activityDiscountsDto.getActivityType()))) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("tenderId", activityDiscountsDto.getTenderId());
createOrderAccountDto.setAddInfo(jsonObject.toJSONString());
}
orderAccountDtos.add(createOrderAccountDto);
}
......@@ -262,6 +285,8 @@ public class OrderAdapter {
createOrderDto.setActivityUpdateStockRequest(activityUpdateStockRequest);
}
createOrderDto.setPayChannelType(createOrderVo.getPayChannelType());
createOrderDto.setPayChannelType(createOrderVo.getPayChannelType());
createOrderDto.setOrderPayItemCreateReqList(createOrderVo.getOrderPayItemCreateReqList());
return createOrderDto;
}
......@@ -977,9 +1002,9 @@ public class OrderAdapter {
responseVo.setReceiveCity(ordersBean.getReceiveCity());
responseVo.setReceiveRegion(ordersBean.getReceiveRegion());
responseVo.setReceiveMobile(ordersBean.getPhone());
if(ordersBean.getAddInfo()!=null&&StringUtils.isNotEmpty(ordersBean.getAddInfo().getRiderPhone()))
if (ordersBean.getAddInfo() != null && StringUtils.isNotEmpty(ordersBean.getAddInfo().getRiderPhone()))
responseVo.setRiderPhone(ordersBean.getAddInfo().getRiderPhone());
if(ordersBean.getAddInfo()!=null&&StringUtils.isNotEmpty(ordersBean.getAddInfo().getExtInfo())) {
if (ordersBean.getAddInfo() != null && StringUtils.isNotEmpty(ordersBean.getAddInfo().getExtInfo())) {
JSONObject extInfo = JSONObject.parseObject(ordersBean.getAddInfo().getExtInfo());
responseVo.setReceiveId(extInfo.getString("receiveId"));
}
......@@ -1025,19 +1050,17 @@ public class OrderAdapter {
if (OrderType.COLLECT_GOODS.getCode().equals(ordersBean.getType())) {
responseVo.setTakeOut(1);
responseVo.setTakeOutDesc("打包带走");
}
else if (OrderType.EAT_IN.getCode().equals(ordersBean.getType())) {
} else if (OrderType.EAT_IN.getCode().equals(ordersBean.getType())) {
responseVo.setTakeOut(0);
responseVo.setTakeOutDesc("店内就餐");
}
else {
} else {
responseVo.setTakeOut(0);
responseVo.setTakeOutDesc("");
}
//配置麦咖啡文案
if (OrderType.TAKE_OUT.getCode().equals(ordersBean.getType())){
if (OrderType.TAKE_OUT.getCode().equals(ordersBean.getType())) {
responseVo.setMcCafeOrderTag(maCafeWaimaiTag);
}else {
} else {
responseVo.setMcCafeOrderTag(maCafePickTag);
}
responseVo.setTableNumber(ordersBean.getBarCounter());
......@@ -1058,7 +1081,9 @@ public class OrderAdapter {
else if(Objects.equals(PayChannel.USVCP.getCode(), ordersBean.getPayChannel())) {
responseVo.setOrderPayType("银联礼品卡支付");
}
else {
else if (Objects.equals(PayChannel.USVCP.getCode(), ordersBean.getPayChannel())) {
responseVo.setOrderPayType("电子风味卡支付");
} else {
responseVo.setOrderPayType("微信支付");
}
}
......@@ -1813,7 +1838,11 @@ public class OrderAdapter {
// 套餐商品设置子商品节点
if (ObjectUtils.equals(ProductTypeEnum.SETMEAL_PRODUCT.getCode(), productBean.getProductType()) || ObjectUtils.equals(ProductTypeEnum.SETMEAL_UPPRICE_PRODUCT.getCode(), productBean.getProductType())) {
List<ProductVo> setMealProducts = new ArrayList<>();
productBean.getComboProduct().forEach(product -> setMealProducts.add(convent2ProductVo(product)));
productBean.getComboProduct().forEach(product -> {
if(!"无".equals(product.getSpecificationName())) {
setMealProducts.add(convent2ProductVo(product));
}
});
productVo.setSetMealProducts(setMealProducts);
}
if (ObjectUtils.equals(ProductTypeEnum.MATERIAL_PRODUCT.getCode(), productBean.getProductType())) {
......
......@@ -14,6 +14,10 @@ public class ResponseCodeConstant {
public final static String RESPONSE_SUCCESS_0_STR = "0";
public final static int RESPONSE_SUCCESS_0 = 0;
// 电子风味卡,密码错误或者余额不足,需要特殊处理
public final static String PASSWORD_WRONG = "8200407";
public final static String NOT_SUFFICIENT_FUND = "8200407";
private final static Set<Object> successResponseCodeSet = new HashSet<>();
static {
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderPayResponseDto
* @Package cn.freemud.entities.dto
* @Description:
* @author: liming.guo
* @date: 2018/5/25 17:10
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@NoArgsConstructor
@Data
@ToString
public class UnifiedOrderApiResponse {
private int code;
@ApiModelProperty(value = "提示信息")
private String message;
@ApiModelProperty(value = "验签可配置")
private String sign;
@ApiModelProperty(value = "支付帐号")
private String payAccount;
@ApiModelProperty(value = "支付渠道编号")
private String ebCode;
@ApiModelProperty(value = "支付渠道描述")
private String platformDesc;
@ApiModelProperty(value = "第三方支付交易序号")
private String platformTradeNo;
@ApiModelProperty(value = "非码交易流水号")
private String fmTradeNo;
@ApiModelProperty(value = "外部交易流水号,由上游系统生成,需保证唯一")
private String outOrderNo;
@ApiModelProperty(value = "app_id编号(微信使用)")
private String appId;
@ApiModelProperty(value = "商户号(微信使用)")
private String mchId;
@ApiModelProperty(value = "包名(微信使用)")
private String _package;
@ApiModelProperty(value = "随机字符串(微信使用)")
private String nonceStr;
@ApiModelProperty(value = "签名(微信使用)")
private String paySign;
@ApiModelProperty(value = "签名类型(微信使用)")
private String paySignType;
@ApiModelProperty(value = "时间戳(微信使用)")
private String timestamp;
@ApiModelProperty(value = "预订单编号")
private String prepayId;
@ApiModelProperty(value = "biz_content(支付宝使用)")
private String bizContent;
@ApiModelProperty(value = "当前预下单请求生成的二维码码串")
private String codeUrl;
@ApiModelProperty(value = "间联单号")
private String endTransTradeNo;
}
......@@ -3,9 +3,12 @@ package cn.freemud.entities.dto.order;
import cn.freemud.entities.vo.CreateOrderVo;
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.create.OrderPayItemCreateReq;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.Data;
import java.util.List;
@Data
public class CreatePrepayRequestDto {
/**
......@@ -64,7 +67,9 @@ public class CreatePrepayRequestDto {
private OrderClientType orderClient;
/**
* 使用银联礼品
* 使用电子风味
*/
private CreateOrderVo.UnionPayCard unionPayCard;
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
}
......@@ -22,4 +22,5 @@ public class ActivityDiscountsDto {
private Integer discountAmount;
private Integer activityType;
private Integer actualActivityGoodsNumber;
private String tenderId;
}
......@@ -14,6 +14,7 @@ package cn.freemud.entities.vo;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import io.swagger.annotations.ApiModel;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderPayItemCreateReq;
import io.swagger.annotations.ApiModelProperty;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import lombok.Builder;
......@@ -23,12 +24,15 @@ import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.ArrayList;
import java.util.List;
@Data
public class CreateOrderVo {
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
@NotEmpty(message = "sessionId 不能为空")
private String sessionId;
......@@ -223,25 +227,25 @@ public class CreateOrderVo {
private String invoiceTitle;
/**
* 是否使用银联SVC卡,如果不为空则为使用
* 是否使用电子风味卡,如果不为空则为使用
*/
@Valid
@ApiModelProperty(value = "银联SVC卡")
@ApiModelProperty(value = "电子风味卡")
private UnionPayCard unionPayCard;
/**
* 银联SVC
* 电子风味
*/
@Data
@ApiModel(value = "银联SVC卡", description = "如果传了银联SVC卡字段,此类中属性必传")
@ApiModel(value = "电子风味卡", description = "如果传了电子风味卡字段,此类中属性必传")
public static class UnionPayCard {
@NotNull(message = "银联SVC卡手机号必传")
@ApiModelProperty(value = "银联SVC卡卡号(手机号)",required = true)
@NotNull(message = "电子风味卡手机号必传")
@ApiModelProperty(value = "电子风味卡卡号(手机号)",required = true)
private String code;
@NotNull(message = "银联SVC卡密码必传")
@ApiModelProperty(value = "银联SVC卡密码",required = true)
@NotNull(message = "电子风味卡密码必传")
@ApiModelProperty(value = "电子风味卡密码",required = true)
private String password;
}
......@@ -327,5 +331,6 @@ public class CreateOrderVo {
* 规则ID
*/
private String ruleId;
}
}
......@@ -18,9 +18,10 @@ public enum PayChannel {
/**
* union svc pay
*/
USVCP("10556", "银联SVC支付"),
USVCP("10556", "电子风味卡支付"),
ALIPAY("10300", "支付宝"),
WXPAY("10211", "微信");
WXPAY("10211", "微信"),
COMPAY("10212", "组合支付");
private String code;
private String desc;
......
......@@ -38,6 +38,7 @@ public enum PayChannelEnum {
*/
public static Map<Integer, PayChannelEnum> payChannelEnumMap = ImmutableMap.of(PayChannelEnum.SVC.getCode(), PayChannelEnum.SVC,
PayChannelEnum.WECHAT.getCode(), PayChannelEnum.WECHAT,
PayChannelEnum.CASH.getCode(), PayChannelEnum.CASH,
PayChannelEnum.ALIPAY.getCode(), PayChannelEnum.ALIPAY
);
......
package cn.freemud.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum PayChannelType {
WECHAT((byte)1,"微信"),
SVC((byte)2,"储值卡"),
ALIPAY((byte)3,"支付宝"),
COMB((byte)4,"混合支付");
private Byte index;
private String name;
public static final String API_DESC = "订单支付渠道类型 1:微信 2:储值卡 3:支付宝 4:混合支付";
public static PayChannelType getByIndex(byte index) {
for (PayChannelType payType : values()) {
if (payType.getIndex().equals(index)) {
return payType;
}
}
return null;
}
}
......@@ -155,6 +155,9 @@ public enum ResponseResult {
ORDER_DELIVERY_CALL_BACK_FAILED("45083", "配送回调失败,为找到对应操作类型"),
ORDER_TAKE_OUT_ADDRESS_NOT_VALID("45063", "收货地址校验失败"),
ORDER_COLLECT_FAILED("45084", "推送入机失败,配送回调失败"),
ORDER_NO_PAU("45063", "订单未支付"),
ORDER_PICK_UP_GOOD_NO("45064", "更新取餐码失败"),
/**
* 支付
*/
......
......@@ -3,6 +3,7 @@ package cn.freemud.fuyou.controller;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.fuyou.controller.request.CompleteRequest;
import cn.freemud.fuyou.controller.request.CreateOrderRequest;
import cn.freemud.fuyou.controller.request.OrderDetailRequest;
import cn.freemud.fuyou.controller.request.RefundRequest;
import cn.freemud.fuyou.service.FuYouOrderService;
import com.freemud.application.sdk.api.log.ApiAnnotation;
......@@ -43,10 +44,22 @@ public class FuYouOrderController {
*/
@ApiAnnotation(logMessage = "/refund")
@PostMapping("/refund")
public BaseResponse refundOperation(@Validated @LogParams @RequestBody RefundRequest request) {
public BaseResponse refund(@Validated @LogParams @RequestBody RefundRequest request) {
return fuyouOrderService.refund(request);
}
/**
* 查询订单:
* @param request
* @return
*/
@ApiAnnotation(logMessage = "/detail")
@PostMapping("/detail")
public BaseResponse detail(@Validated @LogParams @RequestBody OrderDetailRequest request) {
return fuyouOrderService.detail(request);
}
/**
* 订单完成
* @param request
......
package cn.freemud.fuyou.controller.request;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderItemCreateReq;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotEmpty;
......@@ -12,45 +13,32 @@ import java.util.List;
@Setter
public class BaseRequest {
/**
* 订单号
*/
@NotEmpty(message = "订单号不能为空")
private String orderCode;
@NotEmpty(message = "thirdOrderCode 不能为空")
private String thirdOrderCode;
/**
* userId
*/
@NotEmpty(message = "用户id不能为空")
private String userId;
/***
* posid
*/
@NotEmpty(message = "posId不能为空")
private String posId;
@NotEmpty(message = "posCode不能为空")
private String posCode;
@NotEmpty(message = "商户id不能为空")
//商户号
private String partnerId;
@NotEmpty(message = "门店id不能为空")
private String storeId;
/**
* 支付渠道
* 1. 微信,2.支付宝,3.现金 4.svc,5.积分,6优惠券
*/
@NotNull(message = "支付渠道不能为空")
private Integer payChannel;
/**
* 支付金额 单位:分
*/
@NotNull(message = "支付金额不能为空")
private Long payAmount;
/***
* 支付码,微信,支付宝,svc
*/
......@@ -59,18 +47,25 @@ public class BaseRequest {
* 操作人
*/
private String operator;
/**
* 商品信息
*/
private List<OrderItemCreateReq> orderItemList;
/***
* 扩展字段
* 支付流水号 ,用来查询支付信息,支付接口返回的无需入参
*/
private String fmId;
/**
* 下单渠道
* * 1:自营微信小程序 2:SAAS,i应用 3:自营支付宝小程序 4:自营H5 5:自营安卓APP 6:自营苹果APP 7:自营PC-WEB 8:饿了么 9:饿百 10:京东 11:美团外卖 12:自营APP 13:i应用会员 14:i应用订货 15:POS
*/
@NotNull(message = "orderClient 不能为空")
private String orderClient;
/**
* 根据 thirdOrderCode 查询的数据
*/
private OrderInfoReqs orderInfoReqs;
}
......@@ -4,22 +4,28 @@ import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Setter
@Getter
public class CompleteRequest {
/**
* 订单号
* 三方订单号
*/
@NotEmpty(message = "thirdOrderCode 不能为空")
private String thirdOrderCode;
/**
* 下单渠道
* * 1:自营微信小程序 2:SAAS,i应用 3:自营支付宝小程序 4:自营H5 5:自营安卓APP 6:自营苹果APP 7:自营PC-WEB 8:饿了么 9:饿百 10:京东 11:美团外卖 12:自营APP 13:i应用会员 14:i应用订货 15:POS
*/
@NotEmpty(message = "订单号不能为空")
private String orderCode;
@NotNull(message = "orderClient 不能为空")
private String orderClient;
@NotEmpty(message = "商户id不能为空")
//商户号
private String partnerId;
/***
* posid
*/
@NotEmpty(message = "posId不能为空")
private String posId;
@NotEmpty(message = "posCode不能为空")
private String posCode;
@NotEmpty(message = "门店id不能为空")
private String storeId;
......
......@@ -18,6 +18,7 @@ import com.freemud.application.sdk.api.ordercenter.request.create.OrderCostCreat
import com.freemud.application.sdk.api.ordercenter.request.create.OrderItemCreateReq;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderSettlementCreateReq;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import java.util.Date;
import java.util.List;
......@@ -35,12 +36,14 @@ public class CreateOrderRequest {
private String orderCode;
//商户号
@NotEmpty(message = "partnerId 不能为空")
private String partnerId;
//商户名
private String partnerName;
//门店编号
@NotEmpty(message = "storeId 不能为空")
private String storeId;
//第三方门店编号
......@@ -56,6 +59,7 @@ public class CreateOrderRequest {
private String toStoreId;
//用户ID
@NotEmpty(message = "userId 不能为空")
private String userId;
//用户姓名
......@@ -74,6 +78,7 @@ public class CreateOrderRequest {
//订单类型 店内自取实时-1常规堂食 店内自取预约-2预约堂食 店外快递实时-3常规外卖,
// 店外快递预约-4预约外卖 店外自取实时-5常规自取 店外自取预约-6预约自取
// 富有 1:堂食,3:外卖, 7,收银机,8 三方小程序,9 团购
private Integer orderType;
//正常情况下不要设置值,此字段仅在做订单同步时使用
......@@ -113,6 +118,7 @@ public class CreateOrderRequest {
private String companySelfCode;
//第三方订单号/客户展示订单编号
@NotEmpty(message = "thirdOrderCode 不能为空")
private String thirdOrderCode;
//订单备注
......@@ -202,6 +208,7 @@ public class CreateOrderRequest {
//订单商品信息
List<OrderItemCreateReq> orderItemList;
//订单费用信息
List<OrderCostCreateReq> orderCostDetailList;
......
......@@ -10,26 +10,18 @@ import lombok.Setter;
public class DiscountRequest extends BaseRequest {
/**
*优惠券
* 优惠券
*/
private String coupon;
/**
*优惠券
* 优惠券类型
* {@link OldOrderAccountType}
*/
private String couponType;
/**
* 积分
*/
private Long score;
private Long score;
}
package cn.freemud.fuyou.controller.request;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Setter
@Getter
public class OrderDetailRequest {
/**
* 三方订单号
*/
@NotEmpty(message = "thirdOrderCode 不能为空")
private String thirdOrderCode;
/**
* 下单渠道
* * 1:自营微信小程序 2:SAAS,i应用 3:自营支付宝小程序 4:自营H5 5:自营安卓APP 6:自营苹果APP 7:自营PC-WEB 8:饿了么 9:饿百 10:京东 11:美团外卖 12:自营APP 13:i应用会员 14:i应用订货 15:POS
*/
@NotNull(message = "orderClient 不能为空")
private String orderClient;
}
......@@ -4,20 +4,31 @@ import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Getter
@Setter
public class PayQueryRequest {
/**
* 三方订单号
*/
@NotEmpty(message = "thirdOrderCode 不能为空")
private String thirdOrderCode;
/**
* 订单号
* 下单渠道
* * 1:自营微信小程序 2:SAAS,i应用 3:自营支付宝小程序 4:自营H5 5:自营安卓APP 6:自营苹果APP 7:自营PC-WEB 8:饿了么 9:饿百 10:京东 11:美团外卖 12:自营APP 13:i应用会员 14:i应用订货 15:POS
*/
@NotEmpty(message = "订单号不能为空")
private String orderCode;
@NotNull(message = "orderClient 不能为空")
private String orderClient;
/***
* posid
*/
@NotEmpty(message = "posId不能为空")
private String posId;
@NotEmpty(message = "posCode不能为空")
private String posCode;
@NotEmpty(message = "商户id不能为空")
//商户号
......@@ -26,6 +37,16 @@ public class PayQueryRequest {
@NotEmpty(message = "门店id不能为空")
private String storeId;
/**
* 支付渠道
* 1. 微信,2.支付宝,3.现金 4.svc,5.积分,6优惠券
*/
private Integer payChannel;
/**
* 支付金额
*/
private Long payAmount;
}
......@@ -4,29 +4,37 @@ import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Setter
@Getter
public class RefundRequest {
/**
* 订单号
* 三方订单号
*/
@NotEmpty(message = "订单号不能为空")
private String orderCode;
@NotEmpty(message = "thirdOrderCode 不能为空")
private String thirdOrderCode;
/**
* 下单渠道
* * 1:自营微信小程序 2:SAAS,i应用 3:自营支付宝小程序 4:自营H5 5:自营安卓APP 6:自营苹果APP 7:自营PC-WEB 8:饿了么 9:饿百 10:京东 11:美团外卖 12:自营APP 13:i应用会员 14:i应用订货 15:POS
*/
@NotNull(message = "orderClient 不能为空")
private String orderClient;
/**
* userId
*/
@NotEmpty(message = "用户id不能为空")
//@NotEmpty(message = "用户id不能为空")
private String userId;
/***
* posid
* osCode
*/
@NotEmpty(message = "posId不能为空")
private String posId;
@NotEmpty(message = "posCode不能为空")
private String posCode;
@NotEmpty(message = "用户id不能为空")
@NotEmpty(message = "门店id不能为空")
private String storeId;
/**
......
......@@ -12,6 +12,7 @@ import cn.freemud.fuyou.feign.request.CouponAvailableReqVo;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.fuyou.feign.request.ReturnScoreRequest;
import cn.freemud.fuyou.feign.response.*;
import cn.freemud.fuyou.service.processor.CashEventProcessor;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
......@@ -47,7 +48,7 @@ import org.springframework.stereotype.Service;
import java.util.*;
import static cn.freemud.enums.ResponseResult.SUCCESS;
import static cn.freemud.enums.ResponseResult.*;
@Service
......@@ -63,7 +64,7 @@ public class FuYouOrderService {
public FuYouOrderService(OrderSdkService orderSdkService, MapperFacade mapperFacade,
CouponFeignClient couponFeignClient,
PaymentNewService paymentNewService, OfflineCouponSdkService offlineCouponSdkService,
PaymentNewService paymentNewService, OfflineCouponSdkService offlineCouponSdkService,
ScoreFeignClient scoreFeignClient) {
this.orderSdkService = orderSdkService;
this.mapperFacade = mapperFacade;
......@@ -158,6 +159,22 @@ public class FuYouOrderService {
return ResponseUtil.success(orderResponse);
}
/**
* 查询订单详情
*
* @param request
* @return
*/
public BaseResponse detail(OrderDetailRequest request) {
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(request.getOrderClient(), null,
request.getThirdOrderCode(), null, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseConstant.SUCCESS_RESPONSE_CODE, orderInfo.getCode())) {
return ResponseUtil.error(orderInfo.getCode(), orderInfo.getMessage());
}
return ResponseUtil.success(orderInfo.getResult());
}
/**
* 退款
* TODO 需要分布式事物处理
......@@ -167,9 +184,9 @@ public class FuYouOrderService {
*/
public BaseResponse refund(RefundRequest req) {
// 1.退款
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(req.getOrderCode(), 0, LogThreadLocal.getTrackingNo());
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(req.getOrderClient(), null, req.getThirdOrderCode(), null, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseConstant.SUCCESS_RESPONSE_CODE, orderInfo.getCode())) {
return ResponseUtil.error(orderInfo.getCode(),"订单号不存在");
return ResponseUtil.error(orderInfo.getCode(), orderInfo.getMessage());
}
final OrderInfoReqs order = orderInfo.getResult();
if (ObjectUtils.notEqual(order.getPayState(), PayStatus.HAVE_PAID.getCode())) {
......@@ -183,7 +200,7 @@ public class FuYouOrderService {
return baseResponse;
}
//3 .退优惠券
return rectification(order, "富有商家退款");
return rectification(order, "商家退款");
}
......@@ -211,6 +228,13 @@ public class FuYouOrderService {
return payorderSeetlment;
}
private OrderInfoReqs getOrderByThirdOrderCode(String thirdOrderCode, String orderClient) {
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(orderClient, null, thirdOrderCode, null, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseConstant.SUCCESS_RESPONSE_CODE, orderInfo.getCode())) {
throw new RuntimeException(orderInfo.getMessage());
}
return orderInfo.getResult();
}
/***
* 支付完成
......@@ -218,11 +242,15 @@ public class FuYouOrderService {
* @return
*/
public BaseResponse complete(CompleteRequest request) {
OrderInfoReqs orderInfoReqs = getOrderByThirdOrderCode(request.getThirdOrderCode(), request.getOrderClient());
BaseResponse response = new BaseResponse();
if (ObjectUtils.notEqual(PayStatus.HAVE_PAID.getCode(), orderInfoReqs.getPayState())) {
return ResponseUtil.error(ORDER_NO_PAU);
}
OrderChangeStateReq req = new OrderChangeStateReq();
req.setOrderState(OrderStatus.COMPLETE.getCode());
req.setOrderCode(request.getOrderCode());
req.setOrderState(NewOrderStatus.COMPLETE.getIndex());
req.setOrderCode(orderInfoReqs.getOrderCode());
com.freemud.application.sdk.api.ordercenter.response.BaseResponse baseResponse = orderSdkService.updateOrderState(req, LogThreadLocal.getTrackingNo());
BaseResponse response = new BaseResponse();
response.setCode(baseResponse.getCode());
response.setMessage(baseResponse.getMessage());
return response;
......@@ -232,16 +260,12 @@ public class FuYouOrderService {
/***
* 目前支持 优惠券,积分
*
* 冲正
* @return
*/
public BaseResponse rectification(OrderInfoReqs order, String reqRemark) {
if (Objects.equals(order.getOrderState(), NewOrderStatus.COMPLETE.getIndex()) ||
Objects.equals(order.getOrderState(), NewOrderStatus.CLOSED.getIndex())
) {
log.info("rectification 订单状态已完成,或者已经关闭,不支持冲正");
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(),"订单号不存在");
if (Objects.equals(order.getOrderState(), NewOrderStatus.CLOSED.getIndex())) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "已退款");
}
// 2.更改订单
OrderCancelReq orderCancelReq = new OrderCancelReq();
......@@ -252,13 +276,14 @@ public class FuYouOrderService {
orderCancelReq.setOrderClient(2);
orderCancelReq.setCreateEvent(4);
com.freemud.application.sdk.api.ordercenter.response.BaseResponse cancelOrderResponse = orderSdkService.cancelOrder(orderCancelReq, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(SUCCESS, cancelOrderResponse.getCode())) {
if (ObjectUtils.notEqual(SUCCESS.getCode(), cancelOrderResponse.getCode())) {
log.error("orderSdkService.cancelOrder.error,request:{},response:{}", JSON.toJSONString(orderCancelReq),
JSON.toJSONString(cancelOrderResponse));
return ResponseUtil.error(cancelOrderResponse.getCode(),cancelOrderResponse.getMessage());
return ResponseUtil.error(cancelOrderResponse.getCode(), cancelOrderResponse.getMessage());
}
order.getOrderSettlementDetailList().forEach((OrderSettlementResp obj) -> {
//优惠券冲正
if (OrderSettlementType.COUPON.getIndex() == obj.getSettlementType().intValue()) {
DiscountRequest discountRequest = JSONObject.parseObject(obj.getExtInfo(), DiscountRequest.class);
CouponRequest couponCodeVerificationDto = new CouponRequest();
......@@ -289,6 +314,7 @@ public class FuYouOrderService {
JSON.toJSONString(baseResponse));
}
}
//积分充正
if (OrderSettlementType.POINTS.getIndex() == obj.getSettlementType().intValue()) {
ReturnScoreRequest returnScoreRequest = new ReturnScoreRequest();
returnScoreRequest.setMemberId(order.getUserId());
......@@ -331,7 +357,7 @@ public class FuYouOrderService {
case 204:
case 19:
//微信,支付宝,svc
OrderRefundNewRequest refundRequest = new OrderRefundNewRequest();
OrderRefundNewRequest refundRequest = new OrderRefundNewRequest();
refundRequest.setPartnerId(order.getPartnerId());
refundRequest.setVer(2);
refundRequest.setStoreId(order.getStoreId());
......@@ -341,7 +367,7 @@ public class FuYouOrderService {
refundRequest.setRefundId(UUID.randomUUID().toString());
refundRequest.setTotalAmount(Long.valueOf(payRequest.getPayAmount()));
refundRequest.setRefundAmount(Long.valueOf(payRequest.getPayAmount()));
final com.freemud.application.sdk.api.base.BaseResponse<RefundNewResponse> refundResponse = paymentNewService.newOrderRefund(refundRequest,LogThreadLocal.getTrackingNo());
final com.freemud.application.sdk.api.base.BaseResponse<RefundNewResponse> refundResponse = paymentNewService.newOrderRefund(refundRequest, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(refundResponse.getCode(), ResponseResultEnum.SUCCESS.getCode())) {
return ResponseUtil.error(refundResponse.getCode(), refundResponse.getMessage());
}
......
......@@ -7,6 +7,8 @@ import cn.freemud.fuyou.controller.request.DiscountRequest;
import cn.freemud.fuyou.controller.request.PayQueryRequest;
import cn.freemud.fuyou.feign.ScoreFeignClient;
import cn.freemud.fuyou.service.processor.EventProcessorRegister;
import cn.freemud.management.util.ResponseCodeEnum;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.constant.ResponseConstant;
......@@ -64,6 +66,7 @@ public class PaymentService {
//支持的支付方式
Map<Integer, PayChannelEnum> channelEnumMap = ImmutableMap.of(PayChannelEnum.SVC.getCode(), PayChannelEnum.SVC,
PayChannelEnum.WECHAT.getCode(), PayChannelEnum.WECHAT,
PayChannelEnum.CASH.getCode(), PayChannelEnum.CASH,
PayChannelEnum.ALIPAY.getCode(), PayChannelEnum.ALIPAY
);
PayChannelEnum payChannelEnum = channelEnumMap.get(request.getPayChannel());
......@@ -77,37 +80,47 @@ public class PaymentService {
return eventProcessorRegister.getEventProcessor(payChannelEnum.getCode()).process(discountRequest);
}
/**
* 获取订详情
*
* @param orderCOde 订单号
* @return
*/
protected OrderInfoReqs getOrder(String orderCOde) {
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(orderCOde, 0, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseConstant.SUCCESS_RESPONSE_CODE, orderInfo.getCode())) {
throw new RuntimeException("订单号不存在");
}
return orderInfo.getResult();
}
/**
* 查询支付结果,微信,支付宝,svc
* 查询支付结果,微信,支付宝,svc,现金
*
* @param request
* @return
*/
public BaseResponse paymentQuery(PayQueryRequest request) {
log.info("paymentQuery:request:{}", JSON.toJSONString(request));
BaseResponse baseResponse = new BaseResponse();
baseResponse.setCode(ResponseConstant.SUCCESS_RESPONSE_CODE);
baseResponse.setCode(ResponseCodeEnum.SUCCESS.code);
baseResponse.setMessage(ResponseCodeEnum.SUCCESS.msg);
QueryByCodeResponse queryByCodeResponse = orderSdkService.getOrderInfo(request.getOrderClient(), null, request.getThirdOrderCode(), null, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseConstant.SUCCESS_RESPONSE_CODE, queryByCodeResponse.getCode())) {
throw new RuntimeException(queryByCodeResponse.getMessage());
}
OrderInfoReqs order = queryByCodeResponse.getResult();
// 订单状态已更改
if (Objects.equals(order.getPayState(), PayStatus.HAVE_PAID.getCode())) {
baseResponse.setMessage("订单已支付");
return baseResponse;
}
// 现金支付单独处理,不走支付
if (PayChannelEnum.CASH.getCode().equals(request.getPayChannel())) {
PaySuccessReq req = new PaySuccessReq();
req.setOrderCode(order.getOrderCode());
req.setActualPayAmount(request.getPayAmount().toString());
req.setPayChannel(PayChannelEnum.CASH.name());
//req.setPayRequestNo();
paySuccess(req, baseResponse);
return baseResponse;
}
log.info("paymentQuery:request:{}", JSON.toJSONString(request));
PaymentQueryOrderRequest channelRequest = new PaymentQueryOrderRequest();
channelRequest.setPartnerId(request.getPartnerId());
channelRequest.setVer("2");
channelRequest.setStoreId(request.getStoreId());
channelRequest.setTransId(request.getOrderCode());
channelRequest.setFrontTransId(request.getOrderCode());
channelRequest.setStationId(request.getPosId());
channelRequest.setTransId(order.getOrderCode());
channelRequest.setFrontTransId(order.getOrderCode());
channelRequest.setStationId(request.getPosCode());
com.freemud.application.sdk.api.base.BaseResponse<PaymentQueryOrderResponse> query = paymentNewService.queryOrder(channelRequest, LogThreadLocal.getTrackingNo());
baseResponse.setCode(query.getCode());
baseResponse.setMessage(query.getMessage());
......@@ -115,40 +128,40 @@ public class PaymentService {
log.error("scoreFeignClient.query,error:{},入参:{}", JSON.toJSONString(query), JSON.toJSONString(channelRequest));
return baseResponse;
}
OrderInfoReqs order = getOrder(request.getOrderCode());
//final PayChannelEnum payChannelEnum = getPayChannelEnum(request.getPayChannel());
PaySuccessReq req = new PaySuccessReq();
req.setOrderCode(request.getOrderCode());
req.setOrderCode(order.getOrderCode());
req.setActualPayAmount(String.valueOf(query.getData().getAmount()));
req.setPayChannel(query.getData().getPayCode());
req.setPayRequestNo(query.getData().getTransactionCode());
// (0-未支付,1-已支付,2-已冲正,3-已退款,4-已关闭)
String tradeState = query.getData().getStatus();
if (ObjectUtils.equals(tradeState, "1")) {
// 订单状态已更改
if (Objects.equals(order.getPayState(), PayStatus.HAVE_PAID.getCode())) {
return baseResponse;
}
//更改订单状态
BaseResponse<PaySuccessResp> paySuccessRespBaseResponse = orderSdkService.paySuccess(req, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(paySuccessRespBaseResponse.getCode(), ResponseConstant.SUCCESS_RESPONSE_CODE)) {
log.error("orderSdkService.orderAffirm.query,error:{},入参:{}", JSON.toJSONString(query), JSON.toJSONString(channelRequest));
baseResponse.setCode(paySuccessRespBaseResponse.getCode());
baseResponse.setMessage(paySuccessRespBaseResponse.getMessage());
return baseResponse;
}
paySuccess(req, baseResponse);
return baseResponse;
} else if (ObjectUtils.equals(tradeState, "2") ||
ObjectUtils.equals(tradeState, "3")) {
// 优惠冲正
fuYouOrderService.rectification(order,"支付失败,已关单");
// 优惠冲正
fuYouOrderService.rectification(order, "支付失败,已关单");
} else {
baseResponse.setCode(ResponseResult.PAY_BACKEND_CONFIG_ERROR.getCode());
baseResponse.setCode("未支付");
baseResponse.setMessage("未支付");
baseResponse.setResult(query);
}
return baseResponse;
}
private void paySuccess(PaySuccessReq req, BaseResponse baseResponse) {
BaseResponse<PaySuccessResp> paySuccessRespBaseResponse = orderSdkService.paySuccess(req, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(paySuccessRespBaseResponse.getCode(), ResponseConstant.SUCCESS_RESPONSE_CODE)) {
log.error("orderSdkService.paySuccesse(),request:{},response:{}", JSON.toJSONString(req), JSON.toJSONString(paySuccessRespBaseResponse));
baseResponse.setCode(paySuccessRespBaseResponse.getCode());
baseResponse.setMessage(paySuccessRespBaseResponse.getMessage());
}
}
}
......@@ -115,14 +115,30 @@ public abstract class AbstractProcessor implements EventProcessor {
return orderInfo.getResult();
}
/**
* 根据三方订单号查询
* @param thirdOrderCode
* @return
*/
protected OrderInfoReqs getOrderByThirdOrderCode(String thirdOrderCode,String orderClient) {
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(orderClient,null,thirdOrderCode, null, LogThreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseConstant.SUCCESS_RESPONSE_CODE, orderInfo.getCode())) {
throw new RuntimeException(orderInfo.getMessage());
}
return orderInfo.getResult();
}
@Override
public BaseResponse process(DiscountRequest request) {
// 三方订单号兑换 订单信息
OrderInfoReqs orderInfoReqs = getOrderByThirdOrderCode(request.getThirdOrderCode(),request.getOrderClient());
request.setOrderInfoReqs(orderInfoReqs);
log.info("process.DiscountRequest:{}", JSON.toJSONString(request));
BaseResponse response = doProcess(request);
if (ObjectUtils.notEqual(SUCCESS.code, response.getCode())) {
return response;
}
log.info("AbstractProcessor.process,orderCode:{},responst:{}", request.getOrderCode(), JSON.toJSONString(response));
log.info("AbstractProcessor.process,orderCode:{},responst:{}", orderInfoReqs.getOrderCode(), JSON.toJSONString(response));
OrderSettlementReq orderSettlement = getOrderSettlement(request);
// 2.创建结算信息
// todo 分布式事物处理
......
......@@ -94,7 +94,7 @@ private final PaymentNewService paymentNewService;
BaseResponse doProcess(DiscountRequest request) {
BaseResponse baseResponse =new BaseResponse();
baseResponse.setCode(ResponseResultEnum.SUCCESS.getCode());
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
CodePayRequest codePayRequest =new CodePayRequest();
codePayRequest.setCode(request.getCode());
......@@ -109,14 +109,13 @@ private final PaymentNewService paymentNewService;
codePayRequest.setStoreId(orderInfoReqs.getStoreId());
codePayRequest.setFrontTransId(orderInfoReqs.getOrderCode());
codePayRequest.setVer("2");
//codePayRequest.setPayCode("10095");
// codePayRequest.setClientCode(10095L);
codePayRequest.setTransId(orderInfoReqs.getOrderCode());
codePayRequest.setProducts(convertPayProduct(request.getOrderItemList()));
com.freemud.application.sdk.api.base.BaseResponse<CodePayResponse> codePayResponseBaseResponse = paymentNewService.codePay(codePayRequest, LogThreadLocal.getTrackingNo());
log.info("aliPay.paymentFeignClient.codePay,request:{},response:{}", JSON.toJSONString(codePayRequest),JSON.toJSONString(codePayResponseBaseResponse));
if(ObjectUtils.notEqual(ResponseResultEnum.SUCCESS.getCode(),codePayResponseBaseResponse.getCode()) ||
ObjectUtils.notEqual(ResponseResultEnum.SUCCESS.getCode(),codePayResponseBaseResponse.getData().getCode()) ||
ObjectUtils.notEqual(ResponseResultEnum.SUCCESS.getCode(),codePayResponseBaseResponse.getData().getData().getResultCode())
ObjectUtils.notEqual(ResponseResultEnum.SUCCESS.getCode(),String.valueOf(codePayResponseBaseResponse.getData().getCode()))
){
baseResponse.setCode(codePayResponseBaseResponse.getCode());
baseResponse.setMessage(codePayResponseBaseResponse.getMessage());
......@@ -128,9 +127,12 @@ private final PaymentNewService paymentNewService;
@Override
OrderSettlementReq getOrderSettlement(DiscountRequest request) {
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
return buildOrderSettlement("支付宝支付", OrderSettlementType.ALIPAY, true, orderInfoReqs, request);
}
......
......@@ -33,11 +33,14 @@ public class CashEventProcessor extends AbstractProcessor {
return baseResponse;
}
public OrderInfoReqs getOrderByThirdOrderCode(String thirdOrderCode, String orderClient) {
return super.getOrderByThirdOrderCode(thirdOrderCode, orderClient);
}
@Override
OrderSettlementReq getOrderSettlement(DiscountRequest request) {
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
return buildOrderSettlement("富有现金支付", OrderSettlementType.CASH, false, orderInfoReqs, request);
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
return buildOrderSettlement("现金支付", OrderSettlementType.CASH, false, orderInfoReqs, request);
}
@Override
......
......@@ -47,7 +47,7 @@ public class CouponEventProcessor extends AbstractProcessor {
com.freemud.application.sdk.api.ordercenter.response.BaseResponse doProcess(DiscountRequest request) {
com.freemud.application.sdk.api.ordercenter.response.BaseResponse baseResponse = new com.freemud.application.sdk.api.ordercenter.response.BaseResponse();
baseResponse.setCode(SUCCESS.code);
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
//1.核销券
CouponRequest couponCodeVerificationDto = new CouponRequest();
couponCodeVerificationDto.setVer(Integer.valueOf(Version.VERSION_1));
......@@ -55,7 +55,7 @@ public class CouponEventProcessor extends AbstractProcessor {
couponCodeVerificationDto.setPartnerId(Integer.parseInt(orderInfoReqs.getPartnerId()));
//自取:pickup,外送:delivery,麦咖啡微信小程序:mocoffee_wx,麦咖啡支付宝小程序:mocoffee_zfb
couponCodeVerificationDto.setChannel("pickup");
couponCodeVerificationDto.setStation_id(request.getPosId());
couponCodeVerificationDto.setStation_id(request.getPosCode());
couponCodeVerificationDto.setOperator_id("-1");
couponCodeVerificationDto.setStore_id(orderInfoReqs.getStoreId());
//核销不需要核销通知
......@@ -99,8 +99,8 @@ public class CouponEventProcessor extends AbstractProcessor {
@Override
OrderSettlementReq getOrderSettlement(DiscountRequest request) {
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
return buildOrderSettlement("富有优惠券", OrderSettlementType.COUPON, false, orderInfoReqs, request);
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
return buildOrderSettlement("优惠券", OrderSettlementType.COUPON, false, orderInfoReqs, request);
}
@Override
......
......@@ -39,7 +39,7 @@ public class IntegralEventProcessor extends AbstractProcessor {
BaseResponse doProcess(DiscountRequest request) {
BaseResponse baseResponse = new BaseResponse();
baseResponse.setCode(SUCCESS.code);
final OrderInfoReqs order = getOrder(request.getOrderCode());
final OrderInfoReqs order = request.getOrderInfoReqs();
ScorePayRequest scorePayRequest = new ScorePayRequest();
scorePayRequest.setPartnerId(order.getPartnerId());
......@@ -49,9 +49,9 @@ public class IntegralEventProcessor extends AbstractProcessor {
scorePayRequest.setOperationType(14);
scorePayRequest.setIdempotencyBussinessType("5");
scorePayRequest.setChangeScore(request.getScore().intValue());
scorePayRequest.setIdempotencyBussinessId(request.getOrderCode());
scorePayRequest.setIdempotencyBussinessId(order.getOrderCode());
cn.freemud.base.entity.BaseResponse<UpdateScoreResponse> responseBaseResponse = scoreFeignClient.pay(scorePayRequest);
log.info("scoreFeignClient.pay,order:{},response:{}", request.getOrderCode(), JSON.toJSONString(responseBaseResponse));
log.info("scoreFeignClient.pay,order:{},response:{}", order.getOrderCode(), JSON.toJSONString(responseBaseResponse));
if (ObjectUtils.notEqual(SUCCESS.code, responseBaseResponse.getCode())) {
baseResponse.setCode(responseBaseResponse.getCode());
baseResponse.setMessage(responseBaseResponse.getMessage());
......@@ -62,8 +62,8 @@ public class IntegralEventProcessor extends AbstractProcessor {
@Override
OrderSettlementReq getOrderSettlement(DiscountRequest request) {
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
return buildOrderSettlement("富有积分兑换", OrderSettlementType.POINTS, true, orderInfoReqs, request);
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
return buildOrderSettlement("积分兑换", OrderSettlementType.POINTS, true, orderInfoReqs, request);
}
......
......@@ -41,7 +41,7 @@ public class SvcEventProcessor extends AbstractProcessor {
{
BaseResponse baseResponse =new BaseResponse();
baseResponse.setCode(ResponseResultEnum.SUCCESS.getCode());
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
CodePayRequest codePayRequest =new CodePayRequest();
codePayRequest.setCode(request.getCode());
......@@ -74,7 +74,7 @@ public class SvcEventProcessor extends AbstractProcessor {
@Override
OrderSettlementReq getOrderSettlement(DiscountRequest request) {
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
return buildOrderSettlement("SVV支付", OrderSettlementType.SVC, true, orderInfoReqs, request);
}
......
......@@ -36,7 +36,7 @@ public class WeChatEventProcessor extends AbstractProcessor{
BaseResponse doProcess(DiscountRequest request) {
BaseResponse baseResponse =new BaseResponse();
baseResponse.setCode(ResponseResultEnum.SUCCESS.getCode());
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest codePayRequest =new CodePayRequest();
codePayRequest.setCode(request.getCode());
codePayRequest.setAmount(request.getPayAmount());
......@@ -48,7 +48,7 @@ public class WeChatEventProcessor extends AbstractProcessor{
codePayRequest.setStationId("1");
codePayRequest.setOperatorId("1");
codePayRequest.setVer("2");
//codePayRequest.setCode("10102");
//codePayRequest.setClientCode(100037L);
codePayRequest.setPartnerId(orderInfoReqs.getPartnerId());
codePayRequest.setTransId(orderInfoReqs.getOrderCode());
......@@ -68,7 +68,7 @@ public class WeChatEventProcessor extends AbstractProcessor{
@Override
OrderSettlementReq getOrderSettlement(DiscountRequest request) {
OrderInfoReqs orderInfoReqs = getOrder(request.getOrderCode());
OrderInfoReqs orderInfoReqs = request.getOrderInfoReqs();
return buildOrderSettlement("微信支付", OrderSettlementType.WEIXIN, true, orderInfoReqs, request);
}
......
package cn.freemud.service.impl;
import cn.freemud.adapter.LightApplicationConvertToAssortmentSdkAdapter;
import cn.freemud.adapter.OrderAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.AppCreateOrderVo;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.entities.dto.*;import cn.freemud.entities.dto.shoppingCart.NewShoppingCartClearDto;
import cn.freemud.entities.vo.AppCreateOrderVo;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
......@@ -23,8 +17,6 @@ import cn.freemud.service.*;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.RedisUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentCloudPrinter;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
......
......@@ -26,4 +26,7 @@ public interface DeliveryFeiginClient {
@PostMapping("/delivery/listFreeRider")
MCCafeDeliveryBaseResponse<ResRiderTrackDto> listFreeRider(@RequestBody QueryLocusRiderTrackDto request);
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: PaymentClient
* @Package cn.freemud.service.thirdparty
* @Description: 支付服务
* @author: liming.guo
* @date: 2018/5/12519:24
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.*;
import com.freemud.sdk.api.assortment.order.request.payment.UnifiedOrderApplicationRequest;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.web.bind.annotation.*;
@FeignClient(name = "payment-center-application-api",url="${saas.paymentcenter.application.api.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface PaymentApplicationClient {
/**
* 统一下单
*/
@PostMapping("/payment/application/unifiedOrder")
UnifiedOrderApiResponse unifiedOrder(@RequestBody UnifiedOrderApplicationRequest unifiedOrderApplicationRequest, @RequestHeader("partnerId") String partnerId);
}
......@@ -71,7 +71,7 @@
<dependency>
<groupId>com.freemud.sdk.api.assortment</groupId>
<artifactId>assortment-payment-sdk</artifactId>
<version>2.6.1-SNAPSHOT</version>
<version>2.6.1.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
......@@ -95,7 +95,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>deliverycenter-sdk</artifactId>
<version>1.5.RELEASE</version>
<version>1.5.2-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
......
......@@ -4,12 +4,12 @@ import com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderReq
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.lang.math.NumberUtils;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Component
public class DeliverySdkAdapter {
......@@ -52,23 +52,25 @@ public class DeliverySdkAdapter {
deliveryOrderRequestDto.setReceiverLat(new BigDecimal(order.getLatitude()));
deliveryOrderRequestDto.setOrderTime(new Date(order.getGmtCreate()));
deliveryOrderRequestDto.setCallbackUrl(deliveryCallBackUrl);
deliveryOrderRequestDto.setOrderClient(NumberUtils.toInt(order.getOrderClient()));
// 预约单预计送到时间
if (order.getGmtExpect() != null && order.getGmtExpect() != 0) {
deliveryOrderRequestDto.setExpectTime(new Date(order.getGmtExpect()));
}
deliveryOrderRequestDto.setIsPre(order.getNewOrderType() == OrderType.RESERVED_EXPRESS.getIndex() ? 1 : 0);
List<CreateDeliveryOrderRequestDto.DeliveryProductInfo> productInfos = new ArrayList<>();
order.getProductList().forEach(productList -> {
if (productList.getPrice() > 0) {
CreateDeliveryOrderRequestDto.DeliveryProductInfo deliveryProductInfo = new CreateDeliveryOrderRequestDto.DeliveryProductInfo();
deliveryProductInfo.setProductCode(productList.getProductId());
deliveryProductInfo.setProductName(productList.getProductName());
deliveryProductInfo.setProductNumber(productList.getNumber());
deliveryProductInfo.setProductPrice(productList.getPrice().intValue());
productInfos.add(deliveryProductInfo);
}
});
deliveryOrderRequestDto.setProductInfos(productInfos);
Optional.ofNullable(order.getProductList())
.ifPresent(productList ->
deliveryOrderRequestDto.setProductInfos(productList.stream()
.filter(productBean -> Objects.nonNull(productBean.getPrice()))
.filter(productBean -> productBean.getPrice() > 0)
.map(productBean -> {
CreateDeliveryOrderRequestDto.DeliveryProductInfo deliveryProductInfo = new CreateDeliveryOrderRequestDto.DeliveryProductInfo();
deliveryProductInfo.setProductCode(productBean.getProductId());
deliveryProductInfo.setProductName(productBean.getProductName());
deliveryProductInfo.setProductNumber(productBean.getNumber());
deliveryProductInfo.setProductPrice(productBean.getPrice().intValue());
return deliveryProductInfo;
}).collect(Collectors.toCollection(LinkedList::new))));
return deliveryOrderRequestDto;
}
}
......@@ -160,7 +160,7 @@ public enum ResponseResult {
REJECT_ORDER_FAIL("45075", "拒单失败"),
AGREE_REFUND_ORDER_FAIL("45076", "同意退款失败"),
ORDER_REFUND_NOT_APPLY("45077","用户未申请退款"),
ORDER_HAD_AFFIRM_CAN_NOT_REFUND("45078","当前订单不允许退款,请前往B端后台设置"),
ORDER_HAD_AFFIRM_CAN_NOT_REFUND("45078","当前订单不允许退款,请联系管理员设置"),
ORDER_REJECT_REFUND_REPETITION("45079","重复操作,订单已拒绝退款"),
ORDER_REJECT_REFUND_STATUS_NOT("45080","订单不是申请退款中,不能操作"),
ORDER_REJECT_REFUND_STATUS_END("45081","订单未接单或者已取消,不能操作"),
......
......@@ -13,14 +13,10 @@ import cn.freemud.management.util.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerWxappConfig;
import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OperateClient;
import com.freemud.sdk.api.assortment.message.enums.OrderType;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant;
import com.freemud.sdk.api.assortment.message.enums.OrderType;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.request.order.CancelOrderRequest;
import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import org.apache.commons.collections4.CollectionUtils;
......
......@@ -52,4 +52,7 @@ public class PaySuccessReq {
//预订单任务
private OrderTaskReq orderTask;
//取餐码生成规则
private String mealCodeRule;
}
......@@ -215,4 +215,5 @@ public class CreateOrderRequest extends BaseRequest {
private Byte payChannelType;
private List<OrderPayItemCreateReq> orderPayItemCreateReqList;
}
package com.freemud.application.sdk.api.ordercenter.request.create;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class OrderPayItemCreateReq {
private Long id;
private Long orderId;
private String orderCode;
private String partnerId;
private String storeId;
private String payChannelType;
private String payChannelName;
private String operator;
private BigDecimal payAmount;
}
\ No newline at end of file
......@@ -271,4 +271,4 @@ public class OrderInfoReqs {
//支付渠道类型
private String payChannelType;
}
}
\ No newline at end of file
......@@ -35,7 +35,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>productcenter-sdk</artifactId>
<version>3.6.5.SNAPSHOT</version> <!-- //3.6.4-SNAPSHOTE -->
<version>3.7.6-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......@@ -373,4 +373,4 @@
</plugins>
</build>
</project>
\ No newline at end of file
</project>
......@@ -66,6 +66,13 @@ public class MCoffeeShoppingCartController {
return shoppingCartMCoffeeService.getGoodsList(request);
}
@ApiAnnotation(logMessage = "getCartInfoByUser")
@PostMapping(value = "/getCartInfoByUser")
public BaseResponse getCartInfoByUser(@Validated @LogParams @RequestBody QueryCartInfoRequestVo requestVo){
return shoppingCartMCoffeeService.getCartInfoByUser(requestVo);
}
/**
* 查询购物车可使用优惠券
*/
......
......@@ -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;
/**
* 实际参与活动商品数量
......
package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: QueryCartInfoRequestVo
* @Package cn.freemud.entities.vo
* @Description: 简单描述下这个类是做什么用的
* @author: yu.sun
* @date: 2020/9/11 10:35
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class QueryCartInfoRequestVo {
@ApiModelProperty(value = "用户Id",required = true)
@NotEmpty(message = "用户Id不可为空")
private String userId;
@ApiModelProperty(value = "商户Id",required = true)
@NotEmpty(message = "商户Id不可为空")
private String partnerId;
@ApiModelProperty(value = "门店id",required = true)
@NotEmpty(message = "门店id不可为空")
private String storeId;
}
\ No newline at end of file
......@@ -124,4 +124,9 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
* 配送费为零的原因:0:正常,1:超出配送范围
*/
private Integer deliveryFeeZeroReason;
/**
* 代金券
*/
private String couponCode;
}
......@@ -20,8 +20,8 @@ public enum GoodsTypeEnum {
SET_MEAL_GOODS(3, "套餐商品"),
SKU_GOODS(4, "sku商品"),
SPU_GOODS(5, "spu商品"),
REDUCE_PRICE_GOODS(6,"加价购商品"),
MATERIAL(88, "有加料的商品"),
REDUCE_PRICE_GOODS(6, "加价购商品"),
EXCEPTION_GOODS(99, "异常商品:商品菜单变化导致和购物车不商品匹配");
private Integer goodsType;
private String desc;
......
......@@ -85,6 +85,9 @@ public enum ResponseResult {
SHOPPING_CART_SHOP_ID_NOT_EMPTY("44019", "门店编号不能为空"),
SHOPPING_CART_COUPON_CAN_NOT_USE_THIS_SHOP("44020", "券不适用于该门店"),
SHOPPING_CART_SEAT_EMPTY("44020", "键位为空"),
SHOPPING_CART_COUPON_USED("44021", "优惠券已加入餐盘"),
SHOPPING_CART_GOODS_COUPON_CAN_NOT_USE("44022", "已加入同样优惠券,第二张暂不可用"),
SHOPPING_CART_LIMIT_ADD("44025", "加购数量超过限制"),
/**
* 订单状态码
......
......@@ -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,28 @@ public class AssortmentSdkService {
}
/**
* 调用聚合sdk获取缓存中购物车信息
*
* @param partnerId
* @param storeId
* @param useId
* @return
*/
public List<CartGoods> getShoppingCartForCoupon(String partnerId, String storeId, String useId, String tableNumber, ShoppingCartBaseService shoppingCartService) {
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = getCartParamDto(partnerId, storeId, useId);
cartParamDto.setTableNumber(tableNumber);
// 根据不同点餐类型获取不同购物车实例
BaseResponse<List<com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods>> baseResponse = shoppingCartService.getCartGoodsList(cartParamDto, LogThreadLocal.getTrackingNo());
if (baseResponse == null || !ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode()) || CollectionUtils.isEmpty(baseResponse.getResult())) {
return new ArrayList<>();
}
return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CartGoods.class);
}
/**
* 调用聚合sdk设置缓存中购物车信息
*
* @param partnerId
......@@ -128,6 +151,45 @@ public class AssortmentSdkService {
return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CartGoods.class);
}
/**
* 调用聚合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
* @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);
}
/**
......@@ -151,6 +213,35 @@ public class AssortmentSdkService {
checkCartRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
checkCartRequest.setMenuType(BusinessTypeEnum.getByType(menuType).getCode());
BaseResponse<CheckCartRequest> baseResponse ;
baseResponse= shoppingCartService.checkAllCartGoodsForMCoffee(checkCartRequest);
if (baseResponse == null) {
return null;
}
return baseResponse.getResult();
}
/**
* 调用SDK校验购物车
*
* @param oldAllCartGoodsList
* @param partnerId
* @param storeId
* @param shoppingCartGoodsResponseVo
* @param orderType
*/
public CheckCartRequest checkShoppingCartSdkForMCoffee(List<CartGoods> oldAllCartGoodsList, String partnerId,
String storeId, ShoppingCartGoodsBaseResponseVo shoppingCartGoodsResponseVo
, Integer orderType, String tableNumber, String menuType ,ShoppingCartBaseService shoppingCartService) {
CheckCartRequest checkCartRequest = new CheckCartRequest();
checkCartRequest.setCartGoodsList(JSONArray.parseArray(JSONObject.toJSONString(oldAllCartGoodsList), com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods.class));
checkCartRequest.setOrderWay(orderType);
checkCartRequest.setPartnerId(partnerId);
checkCartRequest.setShoppingCartGoodsResponseVo(JSONObject.parseObject(JSONObject.toJSONString(shoppingCartGoodsResponseVo), com.freemud.sdk.api.assortment.shoppingcart.domain.ShoppingCartGoodsResponseVo.class));
checkCartRequest.setStoreId(storeId);
checkCartRequest.setTableNumber(tableNumber);
checkCartRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
checkCartRequest.setMenuType(BusinessTypeEnum.getByType(menuType).getCode());
BaseResponse<CheckCartRequest> baseResponse ;
baseResponse= shoppingCartService.checkAllCartGoodsNew(checkCartRequest);
if (baseResponse == null) {
return null;
......@@ -158,6 +249,7 @@ public class AssortmentSdkService {
return baseResponse.getResult();
}
/**
* 调用SDK获取商品详情
*
......
......@@ -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.CouponAvailableReq;
import cn.freemud.service.impl.mcoffee.entity.MCoffeeAddGoodsRequestVo;
import cn.freemud.service.impl.mcoffee.entity.SwitchShoppingCartRequestVo;
import cn.freemud.service.thirdparty.CustomerApplicationClient;
......@@ -134,9 +135,13 @@ public class ShoppingCartMCoffeeServiceImpl {
}
//商品券已添加情况校验
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = checkGoodsCoupon(oldCartGoodsList, operationType, couponCode);
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = checkGoodsCoupon(oldCartGoodsList, operationType, couponCode,goodsId);
CartGoods addCartGoods = convent2CartGoods(addShoppingCartGoodsRequestVo, goodsId);
setClassificationAndPrice(addCartGoods, productBeanListSpuClass);
if(StringUtils.isNotEmpty(addShoppingCartGoodsRequestVo.getGroupName())) {
addCartGoods.setSkuName(addShoppingCartGoodsRequestVo.getGroupName());
addCartGoods.setSpuName(addShoppingCartGoodsRequestVo.getGroupName());
}
//查询多个商品库存信息
// Integer checkQty = this.checkSkuQty(oldCartGoodsList, addCartGoods);
// queryManyGoodsStocks(partnerId, storeId, menuType, productIds, productBeanListSpuClass, skuId, checkQty);
......@@ -175,7 +180,7 @@ public class ShoppingCartMCoffeeServiceImpl {
}
private List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> checkGoodsCoupon(List<CartGoods> oldCartGoodsList, Integer operationType, String couponCode) {
private List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> checkGoodsCoupon(List<CartGoods> oldCartGoodsList, Integer operationType, String couponCode,String goodsId) {
if (operationType != null && operationType == 1 && StringUtils.isBlank(couponCode)) {
throw new ServiceException(ResponseResult.PARAMETER_MISSING, "商品券券号为空");
}
......@@ -191,8 +196,12 @@ public class ShoppingCartMCoffeeServiceImpl {
calculationDiscountCoupon.setCode(cartGoods.getCouponCode());
coupons.add(calculationDiscountCoupon);
}
if (couponCode != null && couponCode.equals(cartGoods.getCouponCode())) {
throw new ServiceException(ResponseResult.PARAMETER_MISSING, "商品券已添加");
if (StringUtils.isNotEmpty(couponCode) && couponCode.equals(cartGoods.getCouponCode())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_COUPON_USED);
}
//同样商品券不能使用
if (StringUtils.isNotEmpty(couponCode)&& StringUtils.isNotEmpty(cartGoods.getCouponCode()) && goodsId.equals(cartGoods.getGoodsId())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_GOODS_COUPON_CAN_NOT_USE);
}
}
}
......@@ -293,6 +302,18 @@ public class ShoppingCartMCoffeeServiceImpl {
Integer orderType = shoppingCartInfoRequestVo.getOrderType();
String receiveId = shoppingCartInfoRequestVo.getReceiveId();
/**
* 如果couponCode为空,则从缓存里尝试获取
* 如果couponCode不为空,则设置到缓存里
*/
if(StringUtils.isEmpty(couponCode)) {
couponCode = assortmentSdkService.getShoppingCartCoupon(partnerId, storeId, userId, shoppingCartBaseService);
//TODO 校验券是否可用,不可用要删除
} else {
assortmentSdkService.setShoppingCartCouponCode(partnerId, storeId, userId, couponCode, shoppingCartBaseService);
}
// 获取购物车商品
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCart(partnerId, storeId, userId, sessionId, "", shoppingCartBaseService);
......@@ -312,10 +333,19 @@ public class ShoppingCartMCoffeeServiceImpl {
//设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
shoppingCartGoodsResponseVo.setCouponCode(couponCode);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
public BaseResponse getCartInfoByUser(QueryCartInfoRequestVo requestVo){
// 获取购物车商品?
List<CartGoods> cartGoodsList = assortmentSdkService.getShoppingCartForCoupon(requestVo.getPartnerId(), requestVo.getStoreId(), requestVo.getUserId(), "", shoppingCartBaseService);
List<CouponAvailableReq> resList = couponDiscountCalculation.buildAvailableCoupons(requestVo,cartGoodsList);
return ResponseUtil.success(resList);
}
/**
* 查询购物车可用券
*/
......@@ -334,7 +364,7 @@ public class ShoppingCartMCoffeeServiceImpl {
String appId = shoppingCartInfoRequestVo.getAppId();
//非商品券券号
String couponCode = shoppingCartInfoRequestVo.getCouponCode();
// String menuType = shoppingCartInfoRequestVo.getMenuType();
String menuType = shoppingCartInfoRequestVo.getMenuType();
Integer orderType = shoppingCartInfoRequestVo.getOrderType();
// String receiveId = shoppingCartInfoRequestVo.getReceiveId();
......@@ -344,7 +374,7 @@ public class ShoppingCartMCoffeeServiceImpl {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_ADD_INVAILD);
}
// 获取购物车商品-查询用户券-券码校验可用券
availableCoupon = couponDiscountCalculation.availableCoupon(partnerId, storeId, userId, thirdPartyMemberID, unionId, appId, couponCode, orderType, cartGoodsList);
availableCoupon = couponDiscountCalculation.availableCoupon(partnerId, storeId, userId, thirdPartyMemberID, unionId, appId, couponCode, orderType, menuType,cartGoodsList);
return ResponseUtil.success(availableCoupon);
}
......@@ -368,7 +398,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();
}
......
......@@ -193,6 +193,7 @@ public class CalculationServiceImpl {
activityDiscountsDto.setActivityName(discount.getActivityName());
activityDiscountsDto.setActivityType(discountType);
activityDiscountsDto.setDiscountAmount(0 - discountAmount);
activityDiscountsDto.setTenderId(discount.getTenderId());
activityDiscountsDtos.add(activityDiscountsDto);
}
}
......
......@@ -8,23 +8,19 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.CommonService;
import cn.freemud.service.impl.mcoffee.entity.CouponAvailableReq;
import cn.freemud.service.impl.mcoffee.entity.CouponAvailableResp;
import cn.freemud.service.impl.mcoffee.entity.CouponProductVo;
import cn.freemud.service.impl.mcoffee.entity.CouponState;
import cn.freemud.service.thirdparty.CardBinClient;
import cn.freemud.service.thirdparty.CouponClient;
import cn.freemud.service.thirdparty.CustomerExtendClient;
import cn.freemud.utils.BarcodeUtil;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.google.common.collect.Lists;
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;
......@@ -70,6 +66,10 @@ public class CouponDiscountCalculation {
private String appid;
private static final String mcafe = "mccafe";
private static final String mcafePickup ="mccafe_pickup";
/**
* 优惠计算
*/
......@@ -203,7 +203,7 @@ public class CouponDiscountCalculation {
* 可选优惠券
*/
public ActivityClassifyCouponBean availableCoupon( String partnerId, String storeId,String userId,String thirdPartyMemberId,String unionId,String appId
, String couponCode, Integer orderType,List<CartGoods> cartGoods) {
, String couponCode, Integer orderType,String menuType,List<CartGoods> cartGoods) {
// List<CartGoods> tmpCartGoods = cartGoods.parallelStream().filter(k -> StringUtils.isBlank(k.getCouponCode())).collect(Collectors.toList());
boolean hasGoodsCoupon = false;
......@@ -214,8 +214,11 @@ public class CouponDiscountCalculation {
getMemberCouponListRequestDto.setAppId(appId);
getMemberCouponListRequestDto.setThirdPartyMemberId(thirdPartyMemberId);
getMemberCouponListRequestDto.setUnionId(unionId);
//麦咖啡固定值
getMemberCouponListRequestDto.setTag("mccafe");
String tag = mcafe;
if("saas".equals(menuType)){
tag = mcafePickup;
}
getMemberCouponListRequestDto.setTag(tag);
getMemberCouponListRequestDto.setPageNum(1);
getMemberCouponListRequestDto.setPageSize(Integer.MAX_VALUE);
GetMemberCouponListResponseDto.Result result = getMemberCouponList(getMemberCouponListRequestDto);
......@@ -323,6 +326,53 @@ public class CouponDiscountCalculation {
}
public List<CouponAvailableReq> buildAvailableCoupons(QueryCartInfoRequestVo requestVo,List<CartGoods> cartGoods){
List<CouponAvailableReq> resList = new ArrayList<>();
CouponAvailableReq res = new CouponAvailableReq();
res.setProviderId(requestVo.getPartnerId());
res.setMerchantId(requestVo.getPartnerId());
res.setStoreId(requestVo.getStoreId());
List<String> couponList = new ArrayList<>();
res.setChannelIdList(commonService.getOrgCodes(requestVo.getPartnerId(), requestVo.getStoreId()));
List<CouponProductVo> productList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(cartGoods)) {
cartGoods.forEach(cartGood -> {
if (StringUtils.isNotEmpty(cartGood.getCouponCode())) {
couponList.add(cartGood.getCouponCode());
res.setCouponCodes(couponList);
}
if (CollectionUtils.isNotEmpty(cartGood.getProductComboList())) {
cartGood.getProductComboList().forEach(comboxGoods -> {
CouponProductVo couponProductVo = new CouponProductVo();
couponProductVo.setAmount(Integer.valueOf(comboxGoods.getAmount().toString()));
couponProductVo.setKeyProductCode(comboxGoods.getCustomerCode());
couponProductVo.setQuantity(comboxGoods.getQty());
couponProductVo.setProductId(comboxGoods.getGoodsId());
couponProductVo.setCategoryCode(null);
productList.add(couponProductVo);
});
}
if (CollectionUtils.isNotEmpty(cartGood.getProductGroupList())) {
cartGood.getProductGroupList().forEach(comboxGoods -> {
CouponProductVo couponProductVo = new CouponProductVo();
couponProductVo.setAmount(Integer.valueOf(comboxGoods.getAmount().toString()));
couponProductVo.setKeyProductCode(comboxGoods.getCustomerCode());
couponProductVo.setQuantity(comboxGoods.getQty());
couponProductVo.setProductId(comboxGoods.getGoodsId());
couponProductVo.setCategoryCode(null);
productList.add(couponProductVo);
});
}
});
res.setProductList(productList);
Long totalAmount = createProductRequest(cartGoods, productList);
res.setTotalAmount(Integer.valueOf(totalAmount.toString()));
resList.add(res);
}
return resList;
}
// public String getAppSecret(String partnerId) {
......
......@@ -112,4 +112,9 @@ public class MCoffeeAddGoodsRequestVo {
*/
private String couponCode;
/**
* 套餐名称
*/
private String groupName;
}
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