Commit a437ba41 by ping.wu

创建订单代码结构优化

parent 6ba0895c
......@@ -3,9 +3,7 @@ package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.*;
import cn.freemud.monitorcenter.tools.HealthUtil;
import cn.freemud.service.MCCafeOrderService;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.Orderservice;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
......@@ -27,8 +25,6 @@ public class McCafeController {
@Autowired
private MCCafeOrderService mcCafeOrderService;
@Autowired
private OrderAdapterService orderAdapterService;
/**
* 麦咖啡创建订单
......@@ -36,7 +32,7 @@ public class McCafeController {
@ApiAnnotation(logMessage = "createMCCafeOrder")
@PostMapping("/MCoffee/createMCCafeOrder")
public BaseResponse createOrderMCCafe(@Validated @LogParams @RequestBody CreateOrderVo createOrderVo) {
return orderAdapterService.createMCCafeOrder(createOrderVo);
return mcCafeOrderService.createMCCafeOrder(createOrderVo);
}
/**
......
......@@ -22,6 +22,7 @@ import cn.freemud.handler.OrderReportJobHandler;
import cn.freemud.monitorcenter.tools.HealthUtil;
import cn.freemud.service.*;
import cn.freemud.service.impl.MallOrderServiceImpl;
import cn.freemud.service.impl.OrderAdapterServiceImpl;
import cn.freemud.utils.AppLogUtil;
import cn.freemud.utils.ResponseUtil;
import cn.freemud.xxljob.OrderCountJobHandler;
......@@ -44,7 +45,7 @@ public class OrderController {
@Autowired
private Orderservice orderservice;
@Autowired
private OrderAdapterService orderAdapterService;
private OrderAdapterServiceImpl orderAdapterService;
@Autowired
private EncircleOrderService encircleOrderService;
@Autowired
......
......@@ -15,12 +15,12 @@ import java.util.Map;
/**
* app订单服务
*/
public interface AppOrderService {
public interface AppOrderService extends OrderFactoryService{
/**
* 创建订单
*/
BaseResponse createOrderFlow(CreateOrderVo createOrderVo);
// BaseResponse createOrderNew(CreateOrderVo createOrderVo);
/**
* 创建预支付
......@@ -30,7 +30,7 @@ public interface AppOrderService {
/**
* APP下单,下单带商品信息,不经过购物车服务,不唤起支付
*/
BaseResponse createOrder(AppCreateOrderVo createOrderVo, AssortmentCustomerInfoVo customerInfo);
BaseResponse createOrderOld(AppCreateOrderVo createOrderVo, AssortmentCustomerInfoVo customerInfo);
String paySuccessCallback(PaysuccessNoticeMessage message, ConfirmOrderDto confirmOrderDto, Map<String, OrderBeanV1> orderBeans);
}
......@@ -18,12 +18,12 @@ import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo;
* @Copyright: ${DATE.YARE} www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public interface EncircleOrderService {
public interface EncircleOrderService extends OrderFactoryService{
/**
* 创建订单
*/
BaseResponse createOrder(CreateOrderVo createOrderVo);
// BaseResponse createOrderNew(CreateOrderVo createOrderVo);
/**
* 围餐--开台
......
......@@ -24,12 +24,12 @@ import java.util.Map;
* All rights Reserved, Designed By www.freemud.cn
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
public interface MallOrderService {
public interface MallOrderService extends OrderFactoryService{
/**
* 创建订单
*/
BaseResponse createOrder(CreateOrderVo createOrderVo);
// BaseResponse createOrderNew(CreateOrderVo createOrderVo);
/**
* 订单确认完成
......
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.AppCreateOrderVo;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import java.util.Map;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.6.0
* @Title: OrderAdapterService
* @Description: 订单业务适配
* @author: qin.zhou
* @date: 2019/9/818:20
* @Copyright: ${DATE.YARE} www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public interface OrderAdapterService {
/**
* 创建订单
* @param createOrderVo
* @return
*/
BaseResponse createOrderNew(CreateOrderVo createOrderVo);
/**
* 创建订单
* @param param
* @return
*/
BaseResponse createOrderUniversal(Map<String, Object> param);
/**
* 麦咖啡创建订单
* @param createOrderVo
* @return
*/
BaseResponse createMCCafeOrder(CreateOrderVo createOrderVo);
/**
* 创建预支付
*/
BaseResponse createPrepay(CreatePrepayVo createPrepayVo);
/**
* APP下单,下单带商品信息,不经过购物车服务
*/
@Deprecated
BaseResponse appCreateOrder(AppCreateOrderVo createOrderVo);
/**
* 支付回调处理
*/
String paySuccessCallback(PaysuccessNoticeMessage message);
/**
* 支付回调处理
*/
String mcCafePaySuccessCallback(PaysuccessNoticeMessage message);
}
//package cn.freemud.service;
//
//import cn.freemud.base.entity.BaseResponse;
//import cn.freemud.entities.vo.AppCreateOrderVo;
//import cn.freemud.entities.vo.CreateOrderVo;
//import cn.freemud.entities.vo.CreatePrepayVo;
//import cn.freemud.entities.vo.PaysuccessNoticeMessage;
//
//import java.util.Map;
//
///**
// * All rights Reserved, Designed By www.freemud.cn
// *
// * @version V1.6.0
// * @Title: OrderAdapterService
// * @Description: 订单业务适配
// * @author: qin.zhou
// * @date: 2019/9/818:20
// * @Copyright: ${DATE.YARE} www.freemud.cn Inc. All rights reserved.
// * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
// */
//public interface OrderAdapterService {
//
// /**
// * 创建订单
// * @param createOrderVo
// * @return
// */
// BaseResponse createOrderNew(CreateOrderVo createOrderVo);
//
// /**
// * 创建订单
// * @param param
// * @return
// */
// BaseResponse createOrderUniversal(Map<String, Object> param);
//
// /**
// * 麦咖啡创建订单
// * @param createOrderVo
// * @return
// */
// BaseResponse createMCCafeOrder(CreateOrderVo createOrderVo);
//
// /**
// * 创建预支付
// */
// BaseResponse createPrepay(CreatePrepayVo createPrepayVo);
//
// /**
// * APP下单,下单带商品信息,不经过购物车服务
// */
// @Deprecated
// BaseResponse appCreateOrder(AppCreateOrderVo createOrderVo);
//
// /**
// * 支付回调处理
// */
// String paySuccessCallback(PaysuccessNoticeMessage message);
//
// /**
// * 支付回调处理
// */
// String mcCafePaySuccessCallback(PaysuccessNoticeMessage message);
//
//}
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo;
public interface OrderFactoryService {
BaseResponse createOrder(CreateOrderVo createOrderVo);
}
......@@ -17,7 +17,7 @@ import java.util.Map;
* @author liming.guo
* @date 2018/05/08
*/
public interface Orderservice {
public interface Orderservice extends OrderFactoryService{
/**
* 创建订单之前校验前面排队的订单数
......@@ -27,7 +27,7 @@ public interface Orderservice {
/**
* 创建订单
*/
BaseResponse createOrderNew(CreateOrderVo createOrderVo);
// BaseResponse createOrderNew(CreateOrderVo createOrderVo);
BaseResponse scanFaceCreateOrder(CreateOrderVo createOrderVo);
......
......@@ -8,12 +8,12 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import java.util.Map;
public interface PointsMallOrderService {
public interface PointsMallOrderService extends OrderFactoryService{
/**
* 创建订单
*/
BaseResponse createOrder(CreateOrderVo createOrderVo);
// BaseResponse createOrderNew(CreateOrderVo createOrderVo);
/**
* 支付回调
......
......@@ -110,7 +110,7 @@ public class AppOrderServiceImpl implements AppOrderService {
* 不支持会员卡
*/
@Override
public BaseResponse createOrderFlow(CreateOrderVo createOrderVo) {
public BaseResponse createOrder(CreateOrderVo createOrderVo) {
String trackingNo = LogThreadLocal.getTrackingNo();
// 查询用户信息
AssortmentCustomerInfoVo userLoginInfoDto = checkOrder.checkOrderByMember(createOrderVo, trackingNo);
......@@ -179,7 +179,7 @@ public class AppOrderServiceImpl implements AppOrderService {
* APP下单,下单带商品信息,不经过购物车服务,不唤起支付
*/
@Override
public BaseResponse createOrder(AppCreateOrderVo createOrderReq, AssortmentCustomerInfoVo customerInfo) {
public BaseResponse createOrderOld(AppCreateOrderVo createOrderReq, AssortmentCustomerInfoVo customerInfo) {
String trackingNo = LogThreadLocal.getTrackingNo();
String partnerId = createOrderReq.getPartnerId();
String shopId = createOrderReq.getShopId();
......
......@@ -92,7 +92,7 @@ public class CollageOrderServiceImpl implements CollageOrderService {
// 标记订单类型-4 拼单
createOrderVo.setMarketingType(OrderMarketType.COLLAGE.getIndex());
BaseResponse orderCreateResponse = this.orderService.createOrderNew(createOrderVo);
BaseResponse orderCreateResponse = this.orderService.createOrder(createOrderVo);
// if (null != orderCreateResponse && null != orderCreateResponse.getResult()) {
// Object result = orderCreateResponse.getResult();
......
......@@ -27,7 +27,6 @@ import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.EncircleOrderService;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.service.thirdparty.StoreItemClient;
import cn.freemud.service.thirdparty.SvcAppClient;
......@@ -119,7 +118,7 @@ public class EncircleOrderServiceImpl implements EncircleOrderService {
@Autowired
private ActivityCalculationDiscountService calculationDiscountService;
@Autowired
private OrderAdapterService orderAdapterService;
private OrderAdapterServiceImpl orderAdapterService;
@Autowired
private CouponAdapter couponAdapter;
@Autowired
......
......@@ -56,7 +56,6 @@ import cn.freemud.management.service.OrderBaseService;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.BuriedPointService;
import cn.freemud.service.MCCafeOrderService;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.mccafe.CouponClientService;
import cn.freemud.service.mccafe.MCCafeOrderCenterSdkService;
import cn.freemud.service.mccafe.thirdparty.DeliveryFeiginMCCafeClient;
......@@ -113,6 +112,7 @@ import com.freemud.sdk.api.assortment.order.response.order.*;
import cn.freemud.service.mccafe.CouponClientService;
import cn.freemud.service.mccafe.MCCafeOrderCenterSdkService;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import com.freemud.sdk.api.assortment.order.util.LockUtils;
import com.freemud.sdk.api.assortment.order.vo.ProductGroupVo;
import com.freemud.sdk.api.assortment.payment.request.UnifiedOrderRequest;
import com.freemud.sdk.api.assortment.payment.response.OrderRefundResponse;
......@@ -123,6 +123,7 @@ import com.google.gson.Gson;
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.impl.DefaultMapperFactory;
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.joda.time.DateTime;
......@@ -160,6 +161,13 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
private String deliveryCallBackUrl;
@Value("${mcCafe.quickOrder.interval}")
private String quickOrderInterval;
@Value("${mccafe.partner.id}")
private String mcCafePartnerId;
/**
* 创单锁定的key
*/
@Value("${create.order.key.expire:5}")
private String createOrderKeyExpire;
@Autowired
private DeliveryFeiginClient deliveryFeiginClient;
......@@ -213,7 +221,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private AssortmentOpenPlatformWxappAuthorizerManager wxappAuthorizerManager;
@Autowired
private OrderAdapterService orderAdapterService;
private OrderAdapterServiceImpl orderAdapterService;
@Autowired
private AssortmentOpenPlatformPartnerManager assortmentOpenPlatformPartnerManager;
@Autowired
......@@ -230,11 +238,46 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
private CustomerExtendClient customerExtendClient;
@Autowired
private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager;
@Autowired
private AssortmentCustomerInfoManager assortmentCustomerInfoManager;
private static MapperFacade mapper = new DefaultMapperFactory.Builder().build().getMapperFacade();
/**
* 下单检查key,防止重复下单
*/
private final String CREATE_ORDER_KEY = "create_order_key:";
private final String PAY_SUCCESS_KEY = "pay_success_key:";
@Override
public BaseResponse createMCCafeOrder(CreateOrderVo createOrderVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId());
if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
if (!mcCafePartnerId.equals(assortmentCustomerInfoVo.getPartnerId())) {
return ResponseUtil.error(ResponseResult.LOGIN_STORE_ERROR);
}
// 扩展字段中存储 sessionKey
createOrderVo.setSessionKey(assortmentCustomerInfoVo.getSessionKey());
// 添加分布式锁,如果没有取得锁直接返回失败;整个方法执行完毕后会删掉该锁
// 锁定秒数从apollo获取,如果apollo没有设置,默认5秒
String createOrderKey = CREATE_ORDER_KEY + assortmentCustomerInfoVo.getMemberId();
try {
Long expire = Long.valueOf(createOrderKeyExpire);
if (!LockUtils.lock(redisCache.getRedisTemplate(), createOrderKey, expire)) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_CREATE_ERROR);
}
} catch (Exception e) {
throw e;
} finally {
//LockUtils.unlock(redisCache.getRedisTemplate(),createOrderKey);
}
//原标准点餐程序逻辑处理
BaseResponse baseResponse = this.checkStandardParamInfo(createOrderVo);
if (ObjectUtils.notEqual(baseResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return baseResponse;
}
String trackingNo = LogThreadLocal.getTrackingNo();
// 查询用户信息,余额购物车校验
AssortmentCustomerInfoVo userLoginInfoDto = checkMCCafeOrder.checkOrderByMember(createOrderVo, trackingNo);
......@@ -305,7 +348,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
message.setPlatformMchId(newMessage.getPlatformMchId());
message.setTerminalId(newMessage.getAppId());
message.setRuleId(newMessage.getRuleId());
String res = orderAdapterService.mcCafePaySuccessCallback(message);
String res = this.mcCafePaySuccessCallback(message);
JSONObject jsonObject = JSONObject.parseObject(res);
if (jsonObject.containsKey("code")) {
Integer code = (Integer) jsonObject.get("code");
......@@ -319,6 +362,41 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
return newSendPayFaileMessage();
}
// @Override
public String mcCafePaySuccessCallback(PaysuccessNoticeMessage message) {
//添加分布式锁,如果没有取得锁直接返回失败;整个方法执行完毕后会删掉该锁
String paySuccessKey = PAY_SUCCESS_KEY + message.getTrans_id();
if (!LockUtils.lockAfter(redisCache.getRedisTemplate(), paySuccessKey)) {
return orderAdapter.paySuccessLockedMessage();
}
try {
ConfirmOrderDto confirmOrderDto = orderAdapter.convent2ConfirmOrderDto(message);
// 通过交易号从缓存中拿订单号,如果有数据则实际订单号为其value值
String orderId = redisCache.getValue(RedisUtil.getPaymentTransIdOrderKey(confirmOrderDto.getOrderId()));
if (StringUtils.isNotBlank(orderId)) {
confirmOrderDto.setOrderId(orderId);
}
Map<String, OrderBeanV1> orderBeans = orderService.getOrderBeanByOrderId(confirmOrderDto.getOrderId());
if (MapUtils.isEmpty(orderBeans)) {
return gson.toJson(message);
}
OrderBeanV1 orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())) {
return orderAdapter.sendPaySuccessNoticeMessage();
}
/**
* 默认点餐处理
*/
return this.paySuccessCallback(message, confirmOrderDto, orderBeans);
} catch (Exception e) {
throw e;
} finally {
//删除分布式锁
redisCache.delete("saas:lockAfter:" + paySuccessKey);
}
}
public QueryRelationOrderByIdResponseDto getQueryRelationOrderByIdResponseDto(String oid) {
QueryRelatedOrderByCodeRequest baseQueryOrderRequest = new QueryRelatedOrderByCodeRequest();
baseQueryOrderRequest.setOrderCode(oid);
......@@ -576,7 +654,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
message.setPlatform_coupon(0);
message.setMerchant_coupon(0);
//修改为麦咖啡支付成功回调
orderAdapterService.mcCafePaySuccessCallback(message);
this.mcCafePaySuccessCallback(message);
return ResponseUtil.success(createOrderResponse);
}
}
......@@ -2496,4 +2574,23 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
return channelType;
}
/**
* 标准点餐参数校验
*
* @param createOrderVo
* @return
*/
private BaseResponse checkStandardParamInfo(CreateOrderVo createOrderVo) {
if (StringUtils.isEmpty(createOrderVo.getSessionId())) {
return ResponseUtil.error(ResponseResult.CREATE_ORDER_CHECK_SESSION_ERROR);
}
if (StringUtils.isEmpty(createOrderVo.getShopId())) {
return ResponseUtil.error(ResponseResult.CREATE_ORDER_CHECK_STORE_ERROR);
}
if (createOrderVo.getOrderType() == null) {
return ResponseUtil.error(ResponseResult.CREATE_ORDER_CHECK_ORDERTYPE_ERROR);
}
return ResponseUtil.success();
}
}
......@@ -63,7 +63,6 @@ import cn.freemud.manager.SpellGroupOrderDataManager;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.BuriedPointService;
import cn.freemud.service.CouponActivityService;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.Orderservice;
import cn.freemud.service.business.OrderBusinessService;
import cn.freemud.service.order.OrderRelationFactory;
......@@ -271,7 +270,7 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private CacheOpenPlatformPartnerWxappConfigManager cacheOpenPlatformPartnerWxappConfigManager;
@Autowired
private OrderAdapterService orderAdapterService;
private OrderAdapterServiceImpl orderAdapterService;
// @Autowired
// private AssortmentOpenPlatformPartnerManager assortmentOpenPlatformPartnerManager;
@Autowired
......@@ -380,7 +379,13 @@ public class OrderServiceImpl implements Orderservice {
// 原来saas
@Override
public BaseResponse createOrderNew(CreateOrderVo createOrderVo) {
public BaseResponse createOrder(CreateOrderVo createOrderVo) {
//原标准点餐程序逻辑处理
BaseResponse baseResponse = this.checkStandardParamInfo(createOrderVo);
if (ObjectUtils.notEqual(baseResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return baseResponse;
}
String trackingNo = LogThreadLocal.getTrackingNo();
// 查询用户信息、校验svc卡,余额购物车校验
AssortmentCustomerInfoVo userLoginInfoDto = checkOrder.checkOrderByMember(createOrderVo, trackingNo);
......@@ -4374,5 +4379,23 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(responseVo);
}
/**
* 标准点餐参数校验
*
* @param createOrderVo
* @return
*/
private BaseResponse checkStandardParamInfo(CreateOrderVo createOrderVo) {
if (StringUtils.isEmpty(createOrderVo.getSessionId())) {
return ResponseUtil.error(ResponseResult.CREATE_ORDER_CHECK_SESSION_ERROR);
}
if (StringUtils.isEmpty(createOrderVo.getShopId())) {
return ResponseUtil.error(ResponseResult.CREATE_ORDER_CHECK_STORE_ERROR);
}
if (createOrderVo.getOrderType() == null) {
return ResponseUtil.error(ResponseResult.CREATE_ORDER_CHECK_ORDERTYPE_ERROR);
}
return ResponseUtil.success();
}
}
......@@ -24,7 +24,6 @@ import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request;
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.thirdparty.ComPayClient;
import cn.freemud.service.thirdparty.PaymentNewClient;
import cn.freemud.service.thirdparty.SvcAppClient;
......@@ -122,7 +121,7 @@ public class PayServiceImpl {
@Autowired
private OrderAdapterService orderAdapterService;
private OrderAdapterServiceImpl orderAdapterService;
@Autowired
private OrderAdapter orderAdapter;
@Autowired
......
......@@ -24,7 +24,7 @@ import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.CheckOrderUniversal;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.impl.OrderAdapterServiceImpl;
import cn.freemud.service.impl.PayServiceImpl;
import cn.freemud.service.impl.PaymentQueueService;
import cn.freemud.service.thirdparty.ComPayClient;
......@@ -126,7 +126,7 @@ public abstract class UniversalOrderService {
@Autowired
protected CreateOrderAdapter createOrderAdapter;
@Autowired
private OrderAdapterService orderAdapterService;
private OrderAdapterServiceImpl orderAdapterService;
@Autowired
protected AssortmentOpenPlatformWxappManager openPlatformWxappManager;
@Autowired
......
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