Commit 15f848cf by xiaoer.li@freemud.com

Merge remote-tracking branch 'origin/feature/2.0.16-小程序外卖配送逻辑调整'

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
#	order-application-service/pom.xml
#	order-management/pom.xml
parents d96ac350 85dc8b1e
......@@ -42,9 +42,8 @@ import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
import java.util.stream.Stream;
@Component
public class OrderSdkAdapter {
......@@ -73,6 +72,14 @@ public class OrderSdkAdapter {
}
orderRequest.setOperator(operator);
orderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
//配送信息为空,自配送
if (orderBean.getAddInfo() == null || orderBean.getAddInfo().getDeliveryType() == null) {
orderRequest.setDeliveryType(QueryDeliveryType.SELF.getCode());
}
else {
orderRequest.setDeliveryType(orderBean.getAddInfo().getDeliveryType());
}
return orderRequest;
}
......@@ -479,11 +486,12 @@ public class OrderSdkAdapter {
* @param addInfo
*/
private void getThirdDeliveryInfo(List<DeliveryContactInfoCreateReq> deliveryContactInfoList, BaseCreateOrderRequest.DeliveryTypeInfo addInfo) {
if (addInfo != null && addInfo.getDeliveryType() != null && QueryDeliveryType.THIRD.getCode().equals(addInfo.getDeliveryType().getCode())) {
//if (addInfo != null && addInfo.getDeliveryType() != null && QueryDeliveryType.THIRD.getCode().equals(addInfo.getDeliveryType().getCode())) {
if (addInfo != null && addInfo.getDeliveryType() != null) {
DeliveryContactInfoCreateReq deliveryinfo = new DeliveryContactInfoCreateReq();
//地址类型 1:订单地址 2:售后单地址 3:配送员信息
deliveryinfo.setRelateObjectType(3);
deliveryinfo.setAddressDetail(QueryDeliveryType.THIRD.getCode());
deliveryinfo.setAddressDetail(addInfo.getDeliveryType().getCode());
deliveryContactInfoList.add(deliveryinfo);
}
}
......@@ -3332,4 +3340,9 @@ public class OrderSdkAdapter {
response.setOrderCodes((List<String>) baseResponse.getResult());
return response;
}
public BaseQueryOrderRequest convert2wmDeliveryTimeOut(BaseQueryOrderRequest orderConfirmRequest ,Integer timeOut) {
orderConfirmRequest.setTimeout(timeOut);
return orderConfirmRequest;
}
}
package com.freemud.sdk.api.assortment.order.enums;
public enum StoreDeliveryMethod {
THIRD("1","third", "三方物流配送"),
SELF("2","self", "商家自配送");
private String type;
private String code;
private String desc;
StoreDeliveryMethod(String type,String code,String desc) {
this.type = type;
this.code = code;
this.desc = desc;
}
static public String getCodeByType(String type) {
String code = "";
for (StoreDeliveryMethod value : StoreDeliveryMethod.values()) {
if (value.getType().equals(type)) {
code = value.getCode();
break;
}
}
return code;
}
public String getType() {
return type;
}
public String getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
......@@ -58,5 +58,7 @@ public class BaseQueryOrderRequest extends BaseConfig {
//用户预约时间,仅为预约单时存放
private String expectTime;
//外卖单配送类型
private String deliveryType;
}
......@@ -74,15 +74,11 @@ import com.google.gson.Gson;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Service;
import java.sql.Timestamp;
import java.time.Instant;import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static com.freemud.application.sdk.api.membercenter.constant.InterfaceAddressConstant.MEMBER_EXTEND_INFO;
......@@ -853,19 +849,34 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
POSOrderOperationBaseReq request = new POSOrderOperationBaseReq();
request.setOrderCode(baseQueryOrderRequest.getOrderId());
request.setOperator(baseQueryOrderRequest.getOperator());
// 调用门店服务查询外卖单自动完成时间
Boolean isTakeOut = false;
Integer timeOut = 0;
Integer takeOutTimeOut = (null==baseQueryOrderRequest.getTimeout() || baseQueryOrderRequest.getTimeout()==0) ? 180 : baseQueryOrderRequest.getTimeout();
//是saas 外卖单 且是三方配送 调用门店服务查询外卖单自动完成时间
if ((OrderType.GENERAL_EXPRESS.equals(baseQueryOrderRequest.getOrderType())
|| OrderType.RESERVED_EXPRESS.equals(baseQueryOrderRequest.getOrderType()))
&& QueryDeliveryType.THIRD.getCode().equals(baseQueryOrderRequest.getDeliveryType())) {
isTakeOut = true;
}
StoreResponse.Configuration configuration = getStoreAutoConfiguration(baseQueryOrderRequest.getPartnerId(), baseQueryOrderRequest.getShopId(), baseQueryOrderRequest.getTrackingNo());
if (configuration != null ) {
if(StringUtils.isNotEmpty(configuration.getAutoDeliveryTakeOrderWorkflowFinishTime())){
request.setTimeout(AutoOrderConfigTime.getTime(configuration.getAutoDeliveryTakeOrderWorkflowFinishTime()));
if(configuration.getDeliveryFinishedAfterMinute()!=null && configuration.getDeliveryFinishedAfterMinute()>0){
timeOut = isTakeOut ? takeOutTimeOut
//: AutoOrderConfigTime.getTime(configuration.getDeliveryFinishedAfterMinute().toString());
: configuration.getDeliveryFinishedAfterMinute();
//request.setTimeout(timeOut);
}
if(StringUtils.isNotEmpty(baseQueryOrderRequest.getExpectTime()) && StringUtils.isNotEmpty(configuration.getAppointAutoDeliveryTakeOrderWorkflowFinishTime())){
request.setTimeout(AutoOrderConfigTime.getTime(configuration.getAppointAutoDeliveryTakeOrderWorkflowFinishTime()));
timeOut = isTakeOut ? takeOutTimeOut
: AutoOrderConfigTime.getTime(configuration.getAppointAutoDeliveryTakeOrderWorkflowFinishTime());
//request.setTimeout(AutoOrderConfigTime.getTime(configuration.getAppointAutoDeliveryTakeOrderWorkflowFinishTime()));
}
} else {
request.setTimeout(120);
request.setTimeout(timeOut);
}
else {
request.setTimeout((timeOut = isTakeOut ? takeOutTimeOut : 120));
}
com.freemud.application.sdk.api.ordercenter.response.BaseResponse response = orderSdkService.directDelivery(request, baseQueryOrderRequest.getTrackingNo());
return orderSdkAdapter.convent2BaseOrderResponse(response);
}
......@@ -1847,6 +1858,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
return queryPartnerRefundCountResponse;
}
//saas 实时外卖 预约外卖都是 按3个小时流转
private void setTimeout(BaseQueryOrderRequest baseQueryOrderRequest,POSOrderOperationBaseReq request){
String partnerId = baseQueryOrderRequest.getPartnerId();
String storeCode = baseQueryOrderRequest.getShopId();
......@@ -1864,19 +1876,37 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
StoreResponse.Configuration configuration = storeResponse.getBizVO().getStoreConfig();
String orderWarnTime = storeResponse.getBizVO().getOrderWarnTime();
Integer timeout = 0;
Boolean isTakeOut = false;
Integer takeOutTimeOut = (null==baseQueryOrderRequest.getTimeout() || baseQueryOrderRequest.getTimeout()==0) ? 180 : baseQueryOrderRequest.getTimeout();
//是saas 外卖单 且是三方配送
if ((OrderType.GENERAL_EXPRESS.equals(baseQueryOrderRequest.getOrderType())
|| OrderType.RESERVED_EXPRESS.equals(baseQueryOrderRequest.getOrderType()))
&& QueryDeliveryType.THIRD.getCode().equals(baseQueryOrderRequest.getDeliveryType())) {
isTakeOut = true;
}
//自配送外卖单
if (configuration != null) {
//外卖单
//外卖单 店外快递实时-3常规外送 店外快递预约-4预约外送
// 重要的事情重复三遍 saas 实时外卖 预约外卖都是 按3个小时流转
if (OrderType.GENERAL_EXPRESS.equals(baseQueryOrderRequest.getOrderType()) || OrderType.RESERVED_EXPRESS.equals(baseQueryOrderRequest.getOrderType())) {
if (StringUtils.isNotEmpty(configuration.getAutoTakeOutTakeOrderWorkflowFinishTime())) {
timeout = AutoOrderConfigTime.getTime(configuration.getAutoTakeOutTakeOrderWorkflowFinishTime());
//自配送外卖单接单后自动流程时间
if (configuration.getDeliveryProcessingAfterMinute()!=null && configuration.getDeliveryProcessingAfterMinute()>0) {
timeout = QueryDeliveryType.SELF.getCode().equals(baseQueryOrderRequest.getDeliveryType())
//? AutoOrderConfigTime.getTime(configuration.getDeliveryProcessingAfterMinute().toString())
? configuration.getDeliveryProcessingAfterMinute()
: takeOutTimeOut;
}
//预约单
if(OrderType.RESERVED_EXPRESS.equals(baseQueryOrderRequest.getOrderType())
&& StringUtils.isNotEmpty(configuration.getAppointAutoTakeOutTakeOrderWorkflowFinishTime())){
timeout = AutoOrderConfigTime.getTime(configuration.getAppointAutoTakeOutTakeOrderWorkflowFinishTime());
&& configuration.getDeliveryProcessingBeforeMinute()>0){
timeout = QueryDeliveryType.SELF.getCode().equals(baseQueryOrderRequest.getDeliveryType())
//? AutoOrderConfigTime.getTime(configuration.getDeliveryProcessingBeforeMinute().toString())
? configuration.getDeliveryProcessingBeforeMinute()
: takeOutTimeOut;
}
}
} else {//自提、堂食单
else {
//自提、堂食单
if (StringUtils.isNotEmpty(configuration.getAutoSelfmentionTakeOrderWorkflowFinishTime())) {
timeout = AutoOrderConfigTime.getTime(configuration.getAutoSelfmentionTakeOrderWorkflowFinishTime());
}
......@@ -1886,8 +1916,10 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
timeout = AutoOrderConfigTime.getTime(configuration.getAppointAutoSelfmentionTakeOrderWorkflowFinishTime());
}
}
} else {
timeout = 120;
}
else {
//门店设置为空 用默认
timeout = isTakeOut ? takeOutTimeOut : 120;
}
//预约单提醒任务,触发放拉单队列
if (OrderType.RESERVED_EXPRESS.equals(baseQueryOrderRequest.getOrderType())
......
......@@ -44,7 +44,7 @@ import java.util.concurrent.ThreadPoolExecutor;
@EnableSwagger2
@EnableCircuitBreaker
@SpringBootApplication
@EnableDiscoveryClient
//@EnableDiscoveryClient
@EnableAspectJAutoProxy
@ComponentScan({"cn.freemud", "com.freemud"})
@MapperScan({"cn.freemud.*.dao","com.freemud.sdk.api.assortment.orderdistributor.mapper","com.freemud.api.assortment.datamanager.manager",
......
......@@ -79,6 +79,7 @@ import com.freemud.sdk.api.assortment.payment.response.UnifiedOrderResponse;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
......@@ -101,6 +102,7 @@ import java.util.stream.Collectors;
import static cn.freemud.constant.OrderRefundConstant.ALLOW_REFUND;
@Component
@Slf4j
public class OrderAdapter {
private static FastDateFormat yyyyMMddHHmmss = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
......@@ -627,6 +629,8 @@ public class OrderAdapter {
UserDeliveryInfoDto userDeliveryInfoDto = createOrderVo.getUserDeliveryInfoDto();
String deliveryType = userDeliveryInfoDto != null && userDeliveryInfoDto.getStoreDeliveryInfoDto() != null
? userDeliveryInfoDto.getStoreDeliveryInfoDto().getDeliveryType() : "";
createOrderVo.setUserDeliveryInfoDto(userDeliveryInfoDto);
log.info("getCreateOrderDto sessionId:{},createOrderVo:{}",createOrderVo.getSessionId(),JSON.toJSONString(createOrderVo));
Integer orderType;
String receiveAddress = createOrderVo.getStoreAddress();
if (Objects.equals(createOrderVo.getOrderType(), CreateOrderType.TAKE_OUT.getCode())) {
......
......@@ -45,4 +45,5 @@ public class PosBaseRequestDto {
private Integer delivery_status;
private String deliveryId;
private Boolean horseman = false;
}
......@@ -68,6 +68,7 @@ public enum ResponseResult {
STORE_CLOSED_THE_NIGHT("43018", "门店已打烊,请选择其他门店"),
STORE_DELIVERY_HOUR_ERROR("43019", "门店外卖时间错误"),
STORE_WILL_COLSE("43020", "门店即将打烊,不能下单"),
STORE_DDELIVERY_METHOD("43021", "获取门店外卖配送方式异常"),
/**
* 购物车状态码
......
......@@ -154,9 +154,11 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
sendPosService(deliveryStatus,posBaseRequestDto);
} else if (deliveryStatus == DeliveryStatus.RIDERGETMEAL.getCode() || deliveryStatus == DeliveryStatus.RIDERSTARTDELIVERY.getCode()) {
// 订单配送
posBaseRequestDto.setHorseman(true);
sendPosService(deliveryStatus,posBaseRequestDto);
} else if (deliveryStatus == DeliveryStatus.DELIVERYARRIVED.getCode()) {
// 订单已完成
posBaseRequestDto.setHorseman(true);
sendPosService(deliveryStatus,posBaseRequestDto);
} else if (deliveryStatus == DeliveryStatus.DELIVERYERROR.getCode() || deliveryStatus == DeliveryStatus.DELIVERYCANCEL.getCode()) {
Integer sendPosDeliveryStatus;
......
......@@ -59,7 +59,7 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.enums.NewOrderType;
import com.freemud.sdk.api.assortment.order.enums.StoreDeliveryMethod;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import lombok.extern.log4j.Log4j;
......@@ -319,7 +319,7 @@ public class CheckOrder {
storeDeliveryInfoDto.setEnableTakeaway(true);
// 校验收货地址是否可配送
checkReceiveAddress(storeDeliveryInfoDto, createOrderVo);
checkReceiveAddress(storeDeliveryInfoDto, createOrderVo,storeResponseDto.getStoreCode());
}
return pushOrderTime;
}
......@@ -877,7 +877,7 @@ public class CheckOrder {
/**
* 校验收货地址是否可配送
*/
public void checkReceiveAddress(StoreDeliveryInfoDto storeDeliveryInfoDto, CreateOrderVo createOrderVo) {
public void checkReceiveAddress(StoreDeliveryInfoDto storeDeliveryInfoDto, CreateOrderVo createOrderVo,String storeCode) {
//校验收货地址是否可配送
String receiveId = createOrderVo.getReceiveId();
String trackingNo = LogThreadLocal.getTrackingNo();
......@@ -892,6 +892,10 @@ public class CheckOrder {
if (!userDeliveryInfoDto.getUserEnableTakeaway()) {
throw new ServiceException(ResponseResult.ORDER_TAKE_OUT_ADDRESS_NOT_DELIVERY);
}
if (BusinessTypeEnum.SAAS_DELIVERY.getCode().equals(createOrderVo.getMenuType())) {
String s = this.checkDeliveryType(createOrderVo, storeCode, trackingNo);
userDeliveryInfoDto.getStoreDeliveryInfoDto().setDeliveryType(s);
}
userDeliveryInfoDto.setReceiveUserName(receiveAddressResult.getReceiveName());
userDeliveryInfoDto.setReceiveMobile(StringUtils.isEmpty(receiveAddressResult.getMobile()) ? receiveAddressResult.getReceiveMobile() : receiveAddressResult.getMobile());
String receiveAddress = receiveAddressResult.getReceiveAddress();
......@@ -903,7 +907,6 @@ public class CheckOrder {
userDeliveryInfoDto.setReceiveAddress(jsonObject.getString("address"));
}
}
createOrderVo.setUserName(receiveAddressResult.getReceiveName());
createOrderVo.setMobile(StringUtils.isEmpty(receiveAddressResult.getMobile()) ? receiveAddressResult.getReceiveMobile() : receiveAddressResult.getMobile());
createOrderVo.setUserDeliveryInfoDto(userDeliveryInfoDto);
......@@ -980,4 +983,23 @@ public class CheckOrder {
return createOrderVo.getMarketingType() != null && OrderMarketType.COLLAGE.getIndex() == createOrderVo.getMarketingType();
}
public String checkDeliveryType(CreateOrderVo createOrderVo,String storeCode,String trackingNo) {
String code = "";
QueryDeliveryRequest request = new QueryDeliveryRequest();
request.setStoreCode(storeCode);
request.setPartnerId(createOrderVo.getPartnerId());
request.setUserLatitude(createOrderVo.getLatitude());
request.setUserLongitude(createOrderVo.getLongitude());
BaseResponse<QueryDeliverDetailResponse> query = storeCenterService.queryDeliverDetail(request, trackingNo);
if (null == query || !ResponseResult.SUCCESS.getCode().equals(query.getCode())) {
throw new ServiceException(ResponseResult.STORE_DDELIVERY_METHOD);
}
String method = query.getData().getDeliveryMethod();
//StoreDeliveryMethod.
code = StoreDeliveryMethod.getCodeByType(method);
if (StringUtils.isBlank(code)) {
throw new ServiceException(ResponseResult.STORE_DDELIVERY_METHOD);
}
return code;
}
}
......@@ -2943,6 +2943,7 @@ public class OrderServiceImpl implements Orderservice {
mqMessageRequest.setBackOrdersNotifyActivityQueue(backOrdersChangeOrderStatusConsumerQueue);
createOrderRequest.setMqMessageRequest(mqMessageRequest);
createOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
log.info("createOrder sessionId:{},createOrderVo:{}",createOrderVo.getSessionId(),JSON.toJSONString(createOrderRequest));
return orderCenterSdkService.createOrderFlow(createOrderRequest);
}
......
......@@ -61,4 +61,5 @@ public class OrderManagerRequest {
private String pickUpGoodsNo;
private String remark;
private Boolean horseman;
}
......@@ -168,6 +168,7 @@ public enum ResponseResult {
ORDER_DELIVERY_CALL_BACK_FAILED("45083", "配送回调失败,为找到对应操作类型"),
ORDER_UPDATE_PICKUP_FAILED("45084", "更新取餐码失败"),
ORDER_STATUS_FAILED("45085", "订单状态错误"),
ORDER_MOVE_FAILED("45086", "三方配送正在进行,不允许操作"),
/**
* 支付
*/
......
......@@ -111,6 +111,7 @@ public class OrderBaseService {
updateDeliveryInfoByIdRequest.setOrderSubState(DeliveryStatus.WATINGORDER.getCode());
operator = StringUtils.isNotBlank(operator) ? operator : "sys";
updateDeliveryInfoByIdRequest.setOperator(operator);
updateDeliveryInfoByIdRequest.setRemark("创建运单成功");
orderCenterSdkService.updateDeliveryInfoById(updateDeliveryInfoByIdRequest);
}
}
......@@ -5,10 +5,7 @@ import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.entities.dto.response.pay.RefundConfig;
import cn.freemud.management.enums.OrderRefundEnum;
import cn.freemud.management.enums.OrderSource;
import cn.freemud.management.enums.OrderStatus;
import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.enums.*;
import cn.freemud.management.util.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerWxappConfig;
......@@ -28,9 +25,11 @@ import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -68,7 +67,16 @@ public class OrderVerifyHandle {
private OrderSdkAdapter orderSdkAdapter;
@Autowired
private OrderCenterSdkService orderCenterSdkService;
@Autowired
private DeliveryHandle deliveryHandle;
@Value("${delivery.support.ordersource}")
private String supportOrderSource;
@Value("${mccafe.partner.id}")
private String macCafePartnerId;
private static final String THIRD = "third";
private static final String delivery_type_self = "self";
/**
* 接单校验
*
......@@ -116,6 +124,10 @@ public class OrderVerifyHandle {
if (!OrderStatus.RECEIPT.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.DELIVERY_SEND_STATUS_NOTAKE, getOrderManagerResponse(orderBean));
}
//三方配送正在进行,不允许操作送出 除非是骑手已经取餐
if (!macCafePartnerId.equals(orderBean.getCompanyId()) && this.checkSaasWm(orderBean) && this.verifyThirdFlow(orderBean,request)) {
return ResponseUtil.error(ResponseResult.ORDER_MOVE_FAILED);
}
return ResponseUtil.success();
}
......@@ -146,6 +158,9 @@ public class OrderVerifyHandle {
|| orderBean.getRefundList().get(orderBean.getRefundList().size() - 1).getStatus() == 4)) {
return ResponseUtil.error(ResponseResult.DONE_FAIL_APPLY_REFUND, getOrderManagerResponse(orderBean));
}
if (this.checkSaasWm(orderBean) && this.verifyThirdFlow(orderBean,request)) {
return ResponseUtil.error(ResponseResult.ORDER_MOVE_FAILED);
}
return ResponseUtil.success();
}
......@@ -179,6 +194,10 @@ public class OrderVerifyHandle {
if (isWaimai(orderBean) && ObjectUtils.notEqual(OrderStatus.DISTRIBUTION.getCode(), orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER_DELIVERY_FAILED, getOrderManagerResponse(orderBean));
}
//三方配送正在进行,不允许操作送出 除非是骑手已经取餐
if (!macCafePartnerId.equals(orderBean.getCompanyId()) && this.checkSaasWm(orderBean) && this.verifyThirdFlow(orderBean,request)) {
return ResponseUtil.error(ResponseResult.ORDER_MOVE_FAILED);
}
return ResponseUtil.success();
}
......@@ -505,4 +524,30 @@ public class OrderVerifyHandle {
private boolean isPayBySVC(QueryOrdersResponse.DataBean.OrderBean order) {
return PAY_CODE_10102.equalsIgnoreCase(order.getPayChannel());
}
/**
* 需要三方配送的saas外卖
* @param orderBean
* @return
*/
private boolean checkSaasWm(QueryOrdersResponse.DataBean.OrderBean orderBean) {
//
if (1 == orderBean.getType()
&& OrderSource.SAAS.getSource().equals(orderBean.getSource())
&& THIRD.equalsIgnoreCase(orderBean.getAddInfo().getDeliveryType())) {
return true;
} else {
return false;
}
}
private boolean verifyThirdFlow(QueryOrdersResponse.DataBean.OrderBean orderBean,OrderManagerRequest request) {
// 运单异常 运单取消 正常的运单是不允许手工操作流转的
Boolean horseman = request.getHorseman()!=null ? request.getHorseman():false;
List<Integer> allow = Arrays.asList(DeliveryStatus.DELIVERYERROR.getCode(), DeliveryStatus.DELIVERYCANCEL.getCode());
if (!allow.contains(orderBean.getDeliverStatus()) && !horseman) {
return true;
} else {
return false;
}
}
}
\ No newline at end of file
......@@ -23,8 +23,11 @@ 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.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
* All rights Reserved, Designed By www.freemud.cn
*
......@@ -45,6 +48,8 @@ public class SaasOrderHandle {
@Autowired
private OrderCenterSdkService orderCenterSdkService;
@Value("${saasDeliveryTimeOut}")
private Integer wmDeliveryTimeOut;
/**
* 确认接单
......@@ -56,6 +61,7 @@ public class SaasOrderHandle {
public BaseResponse orderConfirm(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
//订单接单
BaseQueryOrderRequest orderConfirmRequest = orderSdkAdapter.getOrderConfirmRequest(request.getOperator(), orderBean);
orderSdkAdapter.convert2wmDeliveryTimeOut(orderConfirmRequest,this.wmDeliveryTimeOut);
BaseOrderResponse confirmOrderResponse = orderCenterSdkService.orderConfirmTake(orderConfirmRequest);
//处理1秒重复接单问题 订单服务接单返回20067重复操作,20018状态机不支持认为接单成功
if ("20067".equals(confirmOrderResponse.getErrcode().toString()) || "20018".equals(confirmOrderResponse.getErrcode().toString()) || "50002".equals(confirmOrderResponse.getErrcode().toString())) {
......@@ -112,6 +118,7 @@ public class SaasOrderHandle {
*/
public BaseResponse orderDelivery(OrderManagerRequest request, QueryOrdersResponse.DataBean.OrderBean orderBean) {
BaseQueryOrderRequest orderDeliveryRequest = orderSdkAdapter.getOrderConfirmRequest(request.getOperator(), orderBean);
orderDeliveryRequest = orderSdkAdapter.convert2wmDeliveryTimeOut(orderDeliveryRequest,this.wmDeliveryTimeOut);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderSend(orderDeliveryRequest);
if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) {
return ResponseUtil.error(ResponseResult.DELIVERY_FAIL);
......
......@@ -40,6 +40,7 @@ public class OrderManagerRequest {
*/
private String operator;
private Boolean horseman;
public OrderManagerRequest(){
}
......@@ -50,6 +51,7 @@ public class OrderManagerRequest {
this.orderId=orderId;
this.operateType=operateType.getOpType();
this.operator=operateClient.getOpName();
this.horseman = false;
}
public OrderManagerRequest(String partnerId, String storeId, String orderId, OperateClient operateClient, OperateType operateType, String reason){
this.partnerId=partnerId;
......@@ -58,5 +60,14 @@ public class OrderManagerRequest {
this.operateType=operateType.getOpType();
this.operator=operateClient.getOpName();
this.reason=reason;
this.horseman = false;
}
public OrderManagerRequest(String partnerId, String storeId, String orderId, OperateClient operateClient, OperateType operateType,Boolean horseman){
this.partnerId=partnerId;
this.storeId=storeId;
this.orderId=orderId;
this.operateType=operateType.getOpType();
this.operator=operateClient.getOpName();
this.horseman = horseman;
}
}
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