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