Commit 3736507e by shuhu.hou@freemud.cn

Merge branch 'feature/20200420_oms接单二期'

parents 731cade8 c7db13ba
......@@ -49,6 +49,12 @@ public class OrderSdkAdapter {
private static final int STACK_SUB = 1;
/**
* 接单request
* @param operator
* @param orderBean
* @return
*/
public BaseQueryOrderRequest getOrderConfirmRequest(String operator, QueryOrdersResponse.DataBean.OrderBean orderBean){
BaseQueryOrderRequest orderRequest = new BaseQueryOrderRequest();
orderRequest.setOrderId(orderBean.getOid());
......@@ -64,6 +70,22 @@ public class OrderSdkAdapter {
return orderRequest;
}
/**
* 配送request
* @param operator
* @param orderBean
* @return
*/
public BaseQueryOrderRequest getOrderDeliveryRequest(String operator, QueryOrdersResponse.DataBean.OrderBean orderBean){
BaseQueryOrderRequest orderDeliveryRequest = getOrderConfirmRequest(operator, orderBean);
if (orderBean.getType() == 1) {
orderDeliveryRequest.setOrderType(com.freemud.application.sdk.api.ordercenter.enums.OrderType.GENERAL_EXPRESS);
} else {
orderDeliveryRequest.setOrderType(com.freemud.application.sdk.api.ordercenter.enums.OrderType.GENERAL_SELF_PICKUP);
}
return orderDeliveryRequest;
}
public CancelOrderRequest convent2CancelOrderRequest(String orderId, String partnerId, AfterSalesType afterSalesType,
String reason, String trackingNo, Long refund_id) {
CancelOrderRequest cancelOrderRequest = new CancelOrderRequest();
......
......@@ -34,6 +34,8 @@ public enum OrderSourceType {
MEAL("meal", "i围餐"),
ALIPAY("alipay", "支付宝"),
SAASMALL("saasmall", "微商城"),
;
......
package cn.freemud.management.adapter;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import com.freemud.application.sdk.api.takeaway.request.order.BaseOrderRequest;
import com.freemud.application.sdk.api.takeaway.request.order.OrderSendOutRequest;
import com.freemud.application.sdk.api.takeaway.request.order.PlatformOrderRequest;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: WaimaiSdkAdapter
* @Package cn.freemud.management.adapter
* @Description:
* @author: shuhu.hou
* @date: 2020/4/20 14:38
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Component
public class WaimaiSdkAdapter {
/**
* 接单request
* @param request
* @param orderBean
* @return
*/
public PlatformOrderRequest getPlatformOrderRequest (OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean){
PlatformOrderRequest platformOrderRequest = new PlatformOrderRequest();
platformOrderRequest.setPlatformOrderId(orderBean.getCustomerOrder());
platformOrderRequest.setChannel(orderBean.getSource());
platformOrderRequest.setCompanyId(orderBean.getCompanyId());
platformOrderRequest.setOrderId(orderBean.getOid());
platformOrderRequest.setShopId(orderBean.getShopId());
platformOrderRequest.setOperator(request.getOperator());
return platformOrderRequest;
}
/**
* 配送request
* @param request
* @param orderBean
* @return
*/
public OrderSendOutRequest getOrderSendOutRequest (OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean){
OrderSendOutRequest orderSendOutRequest = new OrderSendOutRequest();
orderSendOutRequest.setCompanyId(orderBean.getCompanyId());
orderSendOutRequest.setOrderId(orderBean.getOid());
orderSendOutRequest.setShopId(orderBean.getShopId());
orderSendOutRequest.setOperator(request.getOperator());
return orderSendOutRequest;
}
/**
* 送达request
* @param request
* @param orderBean
* @return
*/
public OrderSendOutRequest getOrderArriveRequest (OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean){
OrderSendOutRequest arriveReq = new OrderSendOutRequest();
arriveReq.setOrderId(orderBean.getOid());
arriveReq.setChannel( orderBean.getSource());
arriveReq.setCompanyId(orderBean.getCompanyId());
arriveReq.setOperator(request.getOperator());
arriveReq.setShopId(request.getStoreId());
return arriveReq;
}
}
......@@ -36,8 +36,8 @@ public class OrderManagerController {
private OrderManagerAdapter orderManagerAdapter;
@ApiAnnotation(logMessage = "订单履单")
@ApiOperation(value = "订单履单", notes = "订单履单", produces = "application/json")
@ApiAnnotation(logMessage = "oms订单履单")
@ApiOperation(value = "oms订单履单", notes = "订单履单", produces = "application/json")
@PostMapping("/statusOperate")
public BaseResponse deliveryCreate(@Validated @LogParams @RequestBody OrderManagerRequest request) {
OperateType byOpType = OperateType.getByOpType(request.getOperateType());
......@@ -47,6 +47,12 @@ public class OrderManagerController {
switch (byOpType) {
case ORDER_CONFIRM:
return orderManagerAdapter.orderConfirmTake(request);
case ORDER_DONE:
return orderManagerAdapter.orderDone(request);
case ORDER_SEND:
return orderManagerAdapter.orderDelivery(request);
case ORDER_AFFIRM:
return orderManagerAdapter.orderAffirm(request,null);
case ORDER_REJECT:
return orderManagerAdapter.orderReject(request);
default:
......
......@@ -37,6 +37,11 @@ public class OrderManagerResponse {
this.orderPrintConfig=orderPrintConfig;
this.gmtExpect=gmtExpect;
}
public OrderManagerResponse(RefundStatus refundStatus){
if (refundStatus!=null){
this.refundStatus=refundStatus.getCode();
}
}
public OrderManagerResponse(OrderStatus status, RefundStatus refundStatus){
if (status!=null){
this.status=status.getCode();
......@@ -45,6 +50,12 @@ public class OrderManagerResponse {
this.refundStatus=refundStatus.getCode();
}
}
public OrderManagerResponse(Long gmtExpect, Integer status, Integer refundStatus) {
this.gmtExpect=gmtExpect;
this.status = status;
this.refundStatus = refundStatus;
}
public OrderManagerResponse(String orderPrintConfig, Long gmtExpect, RefundStatus refundStatus){
this.orderPrintConfig=orderPrintConfig;
this.gmtExpect=gmtExpect;
......
......@@ -17,11 +17,11 @@ public enum OrderStatus {
TAKE_ORDER(1, "下单"),
WAIT_PAY(2, "待支付"),
RECEIPT(3, "接单"),
COMPLETE_MAKE(31, "制作完成"),
DISTRIBUTION(4, "配送中"),
COMPLETE(5, "完成"),
CALCEL(6, "取消"),
REFUSE(7,"拒单"),
COMPLETE_MAKE(31, "制作完成");
CANCEL(6, "取消"),
REFUSE(7,"拒单");
private Integer code;
private String desc;
......
......@@ -135,12 +135,23 @@ public enum ResponseResult {
ORDER_REPEAT_DO_COMPLETE("45052", "重复操作,订单已经完成"),
ORDER_HAS_CANCELED("45053", "订单已经被取消"),
ORDER_MALL_NOT_MATCH("45054", "非商城订单,无法操作"),
AFFIRM_ORDER_FAIL("45055", "确认订单失败"),
AFFIRM_ORDER_FAIL("45055", "订单完成失败"),
ORDER_CANNOT_CONFIRM("45056", "该笔订单不是新订单,不能接单"),
ORDER_ACCEPT_FAILED("45057", "接单失败"),
ORDER_ACCEPT_FAILED_CREATE_DELIVERY_FAILED("45058", "创建配送单失败导致接单失败"),
ORDER_OPERATE_TYPE_NOT_VALIDATE("45059","订单操作类型(operateType)不支持"),
ORDER_IS_COMPLETE_CAN_NOT_DELIVERY("45060","订单已经完成,不能送出"),
DELIVERY_SEND_MAKE_UNFINISHED("45061","订单不是制作完成,不能送出"),
DELIVERY_SEND_REPETITION("45062","重复操作,订单已送出"),
DELIVERY_SEND_APPLY_REFUND("45063","订单已经申请退款,不能送出"),
DELIVERY_SEND_STATUS_NOTAKE("45064","订单不是接单,不能送出"),
DELIVERY_FAIL("45065","送出失败,不能送出"),
ORDER_DELIVERY_FAILED("45066","订单不是配送状态,不能送达"),
DONE_FAIL_APPLY_REFUND("45067","订单已经申请退款,不能制作"),
AFFIRM_FAIL_APPLY_REFUND("45068","订单已经申请退款,不能完成"),
DONE_FAIL_NOT_ACCEPT("45069","订单不是接单状态,不能制作"),
DONE_FAIL_REPETITION("45070","重复操作,订单已送出"),
DONE_ORDER_FAIL("45071", "制作完成更改作态失败"),
/**
* 支付
*/
......
package cn.freemud.management.intercept;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.util.ResponseUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: BizExceptionHandler 拦截校验参数
* @Package com.freemud.base.exception
* @Description: 全局异常处理
* @author: aiqi.gong
* @date: 2017/5/8 11:27
* @Copyright: 2017 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@RestControllerAdvice
@Slf4j
public class OrderExceptionHandler {
@ExceptionHandler(OrderServiceException.class)
@ResponseStatus(HttpStatus.OK)
public BaseResponse bindException(OrderServiceException e) {
return ResponseUtil.error(e.getResult());
}
}
\ No newline at end of file
package cn.freemud.management.intercept;
import cn.freemud.management.enums.ResponseResult;
import com.freemud.application.sdk.api.exception.IgnoreErrorAnnotation;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderServiceException
* @Package cn.freemud.management.intercept
* @Description:
* @author: shuhu.hou
* @date: 2020/4/23 11:37
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@IgnoreErrorAnnotation
public class OrderServiceException extends RuntimeException {
private ResponseResult result;
private String message;
public OrderServiceException(ResponseResult result) {
this.result = result;
this.message = result.getMessage();
}
public OrderServiceException(ResponseResult result, String message) {
this.result = result;
this.message = message;
}
public ResponseResult getResult() {
return result;
}
public void setResult(ResponseResult result) {
this.result = result;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
\ No newline at end of file
......@@ -18,5 +18,28 @@ public interface OrderManagerService {
*/
BaseResponse<OrderManagerResponse> orderConfirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean);
/**
* 制作完成
* @param request
* @param orderBean
* @return
*/
BaseResponse<OrderManagerResponse> orderDone(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean);
/**
* 订单配送
* @param request
* @param orderBean
* @return
*/
BaseResponse<OrderManagerResponse> orderDelivery(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean);
/**
* 订单完成
* @param request
* @param orderBean
* @return
*/
BaseResponse<OrderManagerResponse> orderAffirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean);
}
......@@ -3,11 +3,19 @@ package cn.freemud.management.service.adapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.OrderStatus;
import cn.freemud.management.enums.RefundStatus;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.service.impl.OrderVerifyService;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.sdk.api.assortment.order.enums.OldOrderType;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -40,7 +48,98 @@ public class OrderManagerAdapter {
}
/**
* 制作完成
*
* @param request
* @return
*/
public BaseResponse<OrderManagerResponse> orderDone(OrderManagerRequest request) {
//查询订单
QueryOrdersResponse.DataBean.OrderBean orderBean = orderBaseService.getByOrderCode(request.getOrderId());
//订单接单参数校验
BaseResponse verifyResponse = orderVerifyService.orderDoneVerify(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request, orderBean, verifyResponse);
}
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderDone(request, orderBean);
return handleResponse(request, orderBean, orderManagerResponse);
}
/**
* 送出
*
* @param request
* @return
*/
public BaseResponse<OrderManagerResponse> orderDelivery(OrderManagerRequest request) {
//查询订单
QueryOrdersResponse.DataBean.OrderBean orderBean = orderBaseService.getByOrderCode(request.getOrderId());
/*****兼容爱马哥,送出即完成start******/
if (!OldOrderType.TAKE_OUT.getCode().equals(orderBean.getType())) {
return orderAffirm(request, orderBean);
}
/*****容爱马哥,送出即完成end******/
//订单接单参数校验
BaseResponse verifyResponse = orderVerifyService.orderDeliveryVerify(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return StringUtils.equals(verifyResponse.getCode(), ResponseResult.ORDER_IS_COMPLETE_CAN_NOT_DELIVERY.getCode()) ? handleResponse(request, orderBean, ResponseUtil.success()) : handleResponse(request, orderBean, verifyResponse);
}
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderDelivery(request, orderBean);
return handleResponse(request, orderBean, orderManagerResponse);
}
/**
* 完成
*
* @param request
* @return
*/
public BaseResponse<OrderManagerResponse> orderAffirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
if (orderBean == null) {
//查询订单
orderBean = orderBaseService.getByOrderCode(request.getOrderId());
}
//订单接单参数校验
BaseResponse verifyResponse = orderVerifyService.orderAffirmVerify(orderBean, request);
if (ObjectUtils.notEqual(verifyResponse.getCode(), ResponseResult.SUCCESS.getCode())) {
return handleResponse(request, orderBean, verifyResponse);
}
BaseResponse<OrderManagerResponse> orderManagerResponse = orderBeanFactory.getOrderManagerService(orderBean).orderAffirm(request, orderBean);
return handleResponse(request, orderBean, orderManagerResponse);
}
private BaseResponse<OrderManagerResponse> handleResponse(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean, BaseResponse result) {
if (orderBean == null) {
return result;
}
RefundStatus refundStatus = CollectionUtils.isNotEmpty(orderBean.getRefundList()) ? RefundStatus.getByCode(orderBean.getRefundList().get(0).getStatus()) : null;
OrderStatus orderStatus = OrderStatus.getByCode(orderBean.getStatus());
if (ObjectUtils.equals(ResponseResult.SUCCESS.getCode(), result.getCode())) {
OperateType byOpType = OperateType.getByOpType(request.getOperateType());
switch (byOpType) {
case ORDER_CONFIRM:
orderStatus = OrderStatus.RECEIPT;
break;
case ORDER_DONE:
orderStatus = OrderStatus.COMPLETE_MAKE;
break;
case ORDER_SEND:
orderStatus = OrderStatus.DISTRIBUTION;
break;
case ORDER_AFFIRM:
orderStatus = OrderStatus.COMPLETE;
break;
default:
}
return ResponseUtil.success(new OrderManagerResponse(orderStatus, refundStatus));
}
result.setResult(new OrderManagerResponse(orderStatus, refundStatus));
return result;
}
/**
* 拒单
*
* @param request
* @return
*/
......
......@@ -108,7 +108,8 @@ public class OrderDeliveryService {
if (1 != orderBean.getType()) {
return new Pair<>(false, "该订单不是外卖类型订单");
}
if (!orderBean.getSource().equalsIgnoreCase(OrderSourceType.SAAS.getCode())) {
//非支付宝、微信渠道不创建配送单
if (!(orderBean.getSource().equalsIgnoreCase(OrderSourceType.SAAS.getCode()) || orderBean.getSource().equalsIgnoreCase(OrderSourceType.ALIPAY.getCode()))) {
return new Pair<>(false, "订单来源异常");
}
//配送信息为空,则不创建配送单
......
......@@ -2,12 +2,14 @@ package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.enums.OrderSource;
import cn.freemud.management.enums.OrderStatus;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.ordercenter.enums.OperateClient;
import com.freemud.application.sdk.api.ordercenter.enums.OperateType;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.stereotype.Service;
......@@ -38,20 +40,137 @@ public class OrderVerifyService {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
if (!OrderStatus.TAKE_ORDER.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER_CANNOT_CONFIRM);
return ResponseUtil.error(ResponseResult.ORDER_CANNOT_CONFIRM,getOrderManagerResponse(orderBean));
}
return commonVerify(orderBean, request);
}
/**
* 订单配送校验
* @param orderBean
* @param request
* @return
*/
public BaseResponse orderDeliveryVerify(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderManagerRequest request) {
if (orderBean == null) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
//已完成的订单不能配送
if(OrderStatus.COMPLETE.getCode().equals(orderBean.getStatus())){
return ResponseUtil.error(ResponseResult.ORDER_IS_COMPLETE_CAN_NOT_DELIVERY,getOrderManagerResponse(orderBean));
}
//订单已经发送过配送
if(OrderStatus.DISTRIBUTION.getCode().equals(orderBean.getStatus())){
return ResponseUtil.error(ResponseResult.DELIVERY_SEND_REPETITION,getOrderManagerResponse(orderBean));
}
//判断订单状态是否为已经申请退款订单
if (orderBean.getHasRefund() != null
&& orderBean.getHasRefund()
&& (orderBean.getRefundList().get(orderBean.getRefundList().size() - 1).getStatus() == 1
|| orderBean.getRefundList().get(orderBean.getRefundList().size() - 1).getStatus() == 4)) {
return ResponseUtil.error(ResponseResult.DELIVERY_SEND_APPLY_REFUND,getOrderManagerResponse(orderBean));
}
//外卖订单不是接单不能送出
if (!OrderStatus.RECEIPT.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.DELIVERY_SEND_STATUS_NOTAKE,getOrderManagerResponse(orderBean));
}
return commonVerify(orderBean, request);
}
/**
* 订单制作完成校验
* @param orderBean
* @param request
* @return
*/
public BaseResponse orderDoneVerify(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderManagerRequest request) {
if (orderBean == null) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
//已制作完成的订单不能重复操作
if (OrderStatus.COMPLETE_MAKE.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.DONE_FAIL_REPETITION,getOrderManagerResponse(orderBean));
}
//订单非接单状态,不能制作完成
if (!OrderStatus.RECEIPT.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.DONE_FAIL_NOT_ACCEPT,getOrderManagerResponse(orderBean));
}
//判断订单状态是否为已经申请退款订单
if (orderBean.getHasRefund() != null
&& orderBean.getHasRefund()
&& (orderBean.getRefundList().get(orderBean.getRefundList().size() - 1).getStatus() == 1
|| orderBean.getRefundList().get(orderBean.getRefundList().size() - 1).getStatus() == 4)) {
return ResponseUtil.error(ResponseResult.DONE_FAIL_APPLY_REFUND,getOrderManagerResponse(orderBean));
}
return ResponseUtil.success();
}
/**
* 订单完成校验
* @param orderBean
* @param request
* @return
*/
public BaseResponse orderAffirmVerify(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderManagerRequest request) {
if (orderBean == null) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
//判断订单是否已送达
if (OrderStatus.COMPLETE.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.DELIVERY_SEND_REPETITION,getOrderManagerResponse(orderBean));
}
//已取消的订单不能操作
if(OrderStatus.CANCEL.getCode().equals(orderBean.getStatus())){
return ResponseUtil.error(ResponseResult.ORDER_HAS_CANCELED,getOrderManagerResponse(orderBean));
}
//判断订单状态是否为已经申请退款订单
if (orderBean.getHasRefund() != null
&& orderBean.getHasRefund()
&& (orderBean.getRefundList().get(orderBean.getRefundList().size() - 1).getStatus() == 1
|| orderBean.getRefundList().get(orderBean.getRefundList().size() - 1).getStatus() == 4)) {
return ResponseUtil.error(ResponseResult.AFFIRM_FAIL_APPLY_REFUND,getOrderManagerResponse(orderBean));
}
//校验订单是否为配送状态
if(isWaimai(orderBean) && ObjectUtils.notEqual(OrderStatus.DISTRIBUTION.getCode(),orderBean.getStatus())){
return ResponseUtil.error(ResponseResult.ORDER_DELIVERY_FAILED,getOrderManagerResponse(orderBean));
}
return commonVerify(orderBean, request);
}
/**
* 通用校验
* @param orderBean
* @param request
* @return
*/
private BaseResponse commonVerify(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderManagerRequest request) {
if (ObjectUtils.notEqual(orderBean.getCompanyId(), request.getPartnerId())) {
return ResponseUtil.error(ResponseResult.ORDER_PARTNER_ID_NOT_MATCTH);
return ResponseUtil.error(ResponseResult.ORDER_PARTNER_ID_NOT_MATCTH,getOrderManagerResponse(orderBean));
}
//开放平台不传入门店
if (ObjectUtils.notEqual(request.getOperator(), OperateClient.OPEN_PLATFORM.getOpName()) && ObjectUtils.notEqual(orderBean.getShopId(), request.getStoreId())) {
return ResponseUtil.error(ResponseResult.ORDER_STORE_ID_NOT_MATCTH);
return ResponseUtil.error(ResponseResult.ORDER_STORE_ID_NOT_MATCTH,getOrderManagerResponse(orderBean));
}
return ResponseUtil.success();
}
/**
* 是否是外卖
* @param orderBean
* @return
*/
private boolean isWaimai(QueryOrdersResponse.DataBean.OrderBean orderBean){
String source = orderBean.getSource();
if (OrderSource.BDWM.getSource().equals(source) || OrderSource.JDWM.getSource().equals(source)
|| OrderSource.MTWM.getSource().equals(source) || OrderSource.ELEME.getSource().equals(source)){
return true;
}
return false;
}
private OrderManagerResponse getOrderManagerResponse(QueryOrdersResponse.DataBean.OrderBean orderBean){
Integer refundStatus= CollectionUtils.isEmpty(orderBean.getRefundList())?null:orderBean.getRefundList().get(0).getStatus();
return new OrderManagerResponse(orderBean.getGmtExpect(),orderBean.getStatus(),refundStatus);
}
}
......@@ -4,6 +4,7 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.OrderStatus;
import cn.freemud.management.enums.RefundStatus;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.service.OrderBaseService;
......@@ -43,6 +44,8 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Autowired
private OrderCenterSdkService orderCenterSdkService;
@Autowired
private SaasOrderService saasOrderService;
@Autowired
private OrderDeliveryService orderDeliveryService;
@Autowired
private OrderBaseService orderBaseService;
......@@ -52,36 +55,74 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
/**
* 接单
* @param request 请求参数
*
* @param request 请求参数
* @param orderBean 订单实体
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderConfirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
//退款状态
RefundStatus refundStatus = CollectionUtils.isEmpty(orderBean.getRefundList()) ? null : RefundStatus.getByCode(orderBean.getRefundList().get(0).getStatus());
//订单接单
BaseQueryOrderRequest orderConfirmRequest = orderSdkAdapter.getOrderConfirmRequest(request.getOperator(), orderBean);
BaseOrderResponse confirmOrderResponse = orderCenterSdkService.orderConfirmTake(orderConfirmRequest);
// 订单接单
saasOrderService.orderConfirm(request, orderBean);
//获取门店信息
StoreResponse storeInfo = storeCenterService.getStoreInfo(new StoreInfoRequest(orderBean.getCompanyId(), orderBean.getShopId()),"");
if (ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),storeInfo.getStatusCode().toString()) || storeInfo.getBizVO() == null) {
StoreResponse storeInfo = storeCenterService.getStoreInfo(new StoreInfoRequest(orderBean.getCompanyId(), orderBean.getShopId()), "");
if (ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), storeInfo.getStatusCode().toString()) || storeInfo.getBizVO() == null) {
return ResponseUtil.error(ResponseResult.STORE_NOT_FOUND);
}
//处理1秒重复接单问题 订单服务接单返回20067重复操作,20018状态机不支持认为接单成功
if ("20067".equals(confirmOrderResponse.getErrcode().toString()) || "20018".equals(confirmOrderResponse.getErrcode().toString()) || "50002".equals(confirmOrderResponse.getErrcode().toString()) ) {
return ResponseUtil.success(new OrderManagerResponse(storeInfo.getBizVO().getOrderPrintConfig(),orderBean.getGmtExpect(),refundStatus));
}
if( ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),confirmOrderResponse.getErrcode().toString())){
return ResponseUtil.error(ResponseResult.ORDER_ACCEPT_FAILED);
}
//创建配送单
Pair<Boolean, String> deliveryResponse = orderDeliveryService.createDelivery(orderBean, storeInfo, request.getOperator());
if (!deliveryResponse.getKey()){
return ResponseUtil.error(ResponseResult.ORDER_ACCEPT_FAILED_CREATE_DELIVERY_FAILED);
}
// 创建配送单
orderDeliveryService.createDelivery(orderBean, storeInfo, request.getOperator());
// 推送pos消息中心
orderBaseService.sendMessage(orderBean, OperateType.ORDER_CONFIRM, request.getReason());
return ResponseUtil.success(new OrderManagerResponse(storeInfo.getBizVO().getOrderPrintConfig(), orderBean.getGmtExpect(),
CollectionUtils.isEmpty(orderBean.getRefundList()) ? null : RefundStatus.getByCode(orderBean.getRefundList().get(0).getStatus())));
}
/**
* 制作完成
*
* @param request
* @param orderBean
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderDone(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
// 订单制作完成
saasOrderService.orderDone(request, orderBean);
// 推送pos消息中心
orderBaseService.sendMessage(orderBean, OperateType.ORDER_DONE, request.getReason());
return ResponseUtil.success();
}
/**
* 订单配送
*
* @param request
* @param orderBean
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderDelivery(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
// 订单配送
saasOrderService.orderDelivery(request, orderBean);
// 推送pos消息中心
orderBaseService.sendMessage(orderBean, OperateType.ORDER_CONFIRM,request.getReason());
return ResponseUtil.success(new OrderManagerResponse(storeInfo.getBizVO().getOrderPrintConfig(),orderBean.getGmtExpect(),refundStatus));
orderBaseService.sendMessage(orderBean, OperateType.ORDER_SEND, request.getReason());
return ResponseUtil.success();
}
/**
* 订单完成
*
* @param request
* @param orderBean
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderAffirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
// 订单完成
saasOrderService.orderAffirm(request, orderBean);
// 推送pos消息中心
orderBaseService.sendMessage(orderBean, OperateType.ORDER_AFFIRM, request.getReason());
return ResponseUtil.success();
}
}
package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.intercept.OrderServiceException;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
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.lang.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: SaasOrderService
* @Package cn.freemud.management.service.impl
* @Description:
* @author: shuhu.hou
* @date: 2020/4/23 11:30
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Component
public class SaasOrderService {
@Autowired
private OrderSdkAdapter orderSdkAdapter;
@Autowired
private OrderCenterSdkService orderCenterSdkService;
/**
* 确认接单
* @param request
* @param orderBean
* @return
*/
public BaseResponse orderConfirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean){
//订单接单
BaseQueryOrderRequest orderConfirmRequest = orderSdkAdapter.getOrderConfirmRequest(request.getOperator(), orderBean);
BaseOrderResponse confirmOrderResponse = orderCenterSdkService.orderConfirmTake(orderConfirmRequest);
//处理1秒重复接单问题 订单服务接单返回20067重复操作,20018状态机不支持认为接单成功
if ("20067".equals(confirmOrderResponse.getErrcode().toString()) || "20018".equals(confirmOrderResponse.getErrcode().toString()) || "50002".equals(confirmOrderResponse.getErrcode().toString()) ) {
return ResponseUtil.success();
}
if( ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),confirmOrderResponse.getErrcode().toString())){
throw new OrderServiceException(ResponseResult.ORDER_ACCEPT_FAILED);
}
return ResponseUtil.success();
}
/**
* 订单制作完成
* @param request
* @param orderBean
* @return
*/
public BaseResponse orderDone(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean){
BaseQueryOrderRequest orderDoneRequest = orderSdkAdapter.getOrderConfirmRequest(request.getOperator(), orderBean);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderDone(orderDoneRequest);
if (baseOrderResponse==null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),baseOrderResponse.getErrcode().toString())){
throw new OrderServiceException(ResponseResult.DONE_ORDER_FAIL);
}
return ResponseUtil.success();
}
/**
* 订单配送
* @param request
* @param orderBean
* @return
*/
public BaseResponse orderDelivery(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean){
BaseQueryOrderRequest orderDeliveryRequest = orderSdkAdapter.getOrderDeliveryRequest(request.getOperator(), orderBean);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderSend(orderDeliveryRequest);
if (baseOrderResponse==null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),baseOrderResponse.getErrcode().toString())){
throw new OrderServiceException(ResponseResult.DELIVERY_FAIL);
}
return ResponseUtil.success();
}
/**
* 订单完成
* @param request
* @param orderBean
* @return
*/
public BaseResponse orderAffirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean){
BaseQueryOrderRequest orderAffirmRequest = orderSdkAdapter.getOrderDeliveryRequest(request.getOperator(), orderBean);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderAffirm(orderAffirmRequest);
if (baseOrderResponse==null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),baseOrderResponse.getErrcode().toString())){
throw new OrderServiceException(ResponseResult.AFFIRM_ORDER_FAIL);
}
return ResponseUtil.success();
}
}
......@@ -2,11 +2,13 @@ package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.management.adapter.WaimaiSdkAdapter;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.takeaway.request.order.OrderSendOutRequest;
import com.freemud.application.sdk.api.takeaway.request.order.PlatformOrderRequest;
import com.freemud.application.sdk.api.takeaway.service.WaimaiOrderService;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
......@@ -31,18 +33,60 @@ public class WaimaiOrderMangerServiceImpl implements OrderManagerService {
@Autowired
private WaimaiOrderService waimaiOrderService;
@Autowired
private WaimaiSdkAdapter waimaiSdkAdapter;
@Override
public BaseResponse<OrderManagerResponse> orderConfirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
PlatformOrderRequest platformOrderRequest = new PlatformOrderRequest();
platformOrderRequest.setPlatformOrderId(orderBean.getCustomerOrder());
platformOrderRequest.setChannel(orderBean.getSource());
platformOrderRequest.setCompanyId(orderBean.getCompanyId());
platformOrderRequest.setOrderId(orderBean.getOid());
platformOrderRequest.setShopId(orderBean.getShopId());
platformOrderRequest.setOperator(request.getOperator());
PlatformOrderRequest platformOrderRequest = waimaiSdkAdapter.getPlatformOrderRequest(request, orderBean);
com.freemud.application.sdk.api.base.BaseResponse waimaiBaseResponse = waimaiOrderService.confirm(platformOrderRequest, LogTreadLocal.getTrackingNo());
if(ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(),waimaiBaseResponse.getCode())){
if (ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), waimaiBaseResponse.getCode())) {
return ResponseUtil.error(ResponseResult.ORDER_ACCEPT_FAILED);
}
return ResponseUtil.success();
}
/**
* 制作完成
*
* @param request
* @param orderBean
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderDone(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
return ResponseUtil.success();
}
/**
* 订单配送
*
* @param request
* @param orderBean
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderDelivery(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
OrderSendOutRequest orderSendOutRequest = waimaiSdkAdapter.getOrderSendOutRequest(request, orderBean);
com.freemud.application.sdk.api.base.BaseResponse sendoutResponse = waimaiOrderService.sendout(orderSendOutRequest, LogTreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), sendoutResponse.getCode())) {
return ResponseUtil.error(ResponseResult.ORDER_ACCEPT_FAILED);
}
return ResponseUtil.success();
}
/**
* 订单完成
*
* @param request
* @param orderBean
* @return
*/
@Override
public BaseResponse<OrderManagerResponse> orderAffirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
OrderSendOutRequest orderArriveRequest = waimaiSdkAdapter.getOrderArriveRequest(request, orderBean);
com.freemud.application.sdk.api.base.BaseResponse arriveResponse = waimaiOrderService.arrive(orderArriveRequest, LogTreadLocal.getTrackingNo());
if (ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), arriveResponse.getCode())) {
return ResponseUtil.error(ResponseResult.ORDER_ACCEPT_FAILED);
}
return ResponseUtil.success();
......
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