Commit 140da01e by 周晓航

Merge branch 'feature-ka半自动派单ID1040800-20211222-zxh' into qa

# Conflicts:
#	order-management/src/main/java/cn/freemud/management/service/impl/SaasOrderMangerServiceImpl.java
parents a42b1e38 adcbc575
...@@ -27,6 +27,7 @@ import com.freemud.application.sdk.api.util.DateUtil; ...@@ -27,6 +27,7 @@ import com.freemud.application.sdk.api.util.DateUtil;
import com.freemud.sdk.api.assortment.order.constant.CommonConstant; import com.freemud.sdk.api.assortment.order.constant.CommonConstant;
import com.freemud.sdk.api.assortment.order.domain.OrderStatesVO; import com.freemud.sdk.api.assortment.order.domain.OrderStatesVO;
import com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant; import com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant;
import com.freemud.sdk.api.assortment.order.entities.other.OtherParamDTO;
import com.freemud.sdk.api.assortment.order.entities.promption.ActivityUpdateStockRequest; import com.freemud.sdk.api.assortment.order.entities.promption.ActivityUpdateStockRequest;
import com.freemud.sdk.api.assortment.order.entities.promption.SubtractStockVO; import com.freemud.sdk.api.assortment.order.entities.promption.SubtractStockVO;
import com.freemud.sdk.api.assortment.order.enums.*; import com.freemud.sdk.api.assortment.order.enums.*;
...@@ -64,12 +65,12 @@ public class OrderSdkAdapter { ...@@ -64,12 +65,12 @@ public class OrderSdkAdapter {
/** /**
* 接单request * 接单request
*
* @param operator * @param operator
* @param orderBean * @param orderBean
* @param dispatchType 派单模式(0-系统自动派单;1-手动派单) null表示方法重载使用,无需关注该参数
* @return * @return
*/ */
public BaseQueryOrderRequest getOrderConfirmRequest(String operator, OrderBeanV1 orderBean) { public BaseQueryOrderRequest getOrderConfirmRequest(String operator, OrderBeanV1 orderBean, OtherParamDTO otherParamDTO) {
BaseQueryOrderRequest orderRequest = new BaseQueryOrderRequest(); BaseQueryOrderRequest orderRequest = new BaseQueryOrderRequest();
orderRequest.setOrderId(orderBean.getOid()); orderRequest.setOrderId(orderBean.getOid());
orderRequest.setShopId(orderBean.getShopId()); orderRequest.setShopId(orderBean.getShopId());
...@@ -89,6 +90,10 @@ public class OrderSdkAdapter { ...@@ -89,6 +90,10 @@ public class OrderSdkAdapter {
} else { } else {
orderRequest.setDeliveryType(orderBean.getAddInfo().getDeliveryType()); orderRequest.setDeliveryType(orderBean.getAddInfo().getDeliveryType());
} }
if (Objects.nonNull(otherParamDTO)) {
orderRequest.setDispatchType(otherParamDTO.getDispatchType());
orderRequest.setDispatchTimeout(otherParamDTO.getDispatchTimeout());
}
return orderRequest; return orderRequest;
} }
...@@ -4034,4 +4039,7 @@ public class OrderSdkAdapter { ...@@ -4034,4 +4039,7 @@ public class OrderSdkAdapter {
} }
} }
public BaseQueryOrderRequest getOrderConfirmRequest(String operator, OrderBeanV1 orderBean) {
return this.getOrderConfirmRequest(operator,orderBean,null);
}
} }
package com.freemud.sdk.api.assortment.order.entities.other;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/22 上午11:11
* @description : 额外参数逻辑处理 操作
*/
@Data
public class OtherParamDTO {
/**
* 派单模式(0-系统自动派单;1-手动派单)
* 内置传参使用
*/
private String dispatchType;
/**
* 半自动派单时间 (分钟)
*/
private Integer dispatchTimeout;
}
...@@ -70,4 +70,8 @@ public class BaseQueryOrderRequest extends BaseConfig { ...@@ -70,4 +70,8 @@ public class BaseQueryOrderRequest extends BaseConfig {
* 内置传参使用 * 内置传参使用
*/ */
private String dispatchType; private String dispatchType;
/**
* 半自动派单时间 (分钟)
*/
private Integer dispatchTimeout;
} }
...@@ -922,6 +922,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService { ...@@ -922,6 +922,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
request.setOrderCode(baseQueryOrderRequest.getOrderId()); request.setOrderCode(baseQueryOrderRequest.getOrderId());
request.setOperator(baseQueryOrderRequest.getOperator()); request.setOperator(baseQueryOrderRequest.getOperator());
request.setDispatchType(baseQueryOrderRequest.getDispatchType()); request.setDispatchType(baseQueryOrderRequest.getDispatchType());
request.setDispatchTimeout(baseQueryOrderRequest.getDispatchTimeout());
// 引入门店基础服务 查询自动制作完成配置时间 // 引入门店基础服务 查询自动制作完成配置时间
setTimeout(baseQueryOrderRequest,request); setTimeout(baseQueryOrderRequest,request);
com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp response = orderSdkService.acceptOrder(request, baseQueryOrderRequest.getTrackingNo()); com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp response = orderSdkService.acceptOrder(request, baseQueryOrderRequest.getTrackingNo());
......
package cn.freemud.management.entities.dto.request.console;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/24 上午9:47
* @description : 派单配置
*/
@Data
public class DispatchConfig {
/**
* 0工作日
*/
public static int DATETYPE_ZERO = 0;
/**
* 1双休日
*/
public static int DATETYPE_ONE = 1;
/**
* 2活动日
*/
public static int DATETYPE_TWO = 2;
/**
* 日期类型(0工作日,1双休日,2活动日)
*/
private int dateType;
/**
* 派单时间(分钟)
*/
private Integer dispatchTime;
/**
* 2活动日 才有值
* 活动开始时间(yyyy-MM-dd HH:mm:ss)
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
/**
* 2活动日 才有值
* 活动结束时间(yyyy-MM-dd HH:mm:ss)
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
/**
* 高峰期派单配置(json)
*/
private List<PeakTimeConfig> peakTimeConfigList;
}
...@@ -2,6 +2,8 @@ package cn.freemud.management.entities.dto.request.console; ...@@ -2,6 +2,8 @@ package cn.freemud.management.entities.dto.request.console;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* @author : xh.Z * @author : xh.Z
* @email : fisherman0510@163.com * @email : fisherman0510@163.com
...@@ -68,4 +70,9 @@ public class ExpandFieldsDTO { ...@@ -68,4 +70,9 @@ public class ExpandFieldsDTO {
*/ */
private String dispatchType; private String dispatchType;
/**
* 手动派单的半自动配置
*/
private List<DispatchConfig> dispatchConfig;
} }
package cn.freemud.management.entities.dto.request.console;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/12/24 上午9:48
* @description : 高峰期派单配置
*/
@Data
public class PeakTimeConfig {
/**
* 时间格式 HH:mm:ss
*/
private String startTime;
/**
* 时间格式 HH:mm:ss
*/
private String endTime;
/**
* 派单时间
*/
private Integer dispatchTime;
}
...@@ -68,4 +68,9 @@ public class OrderManagerRequest { ...@@ -68,4 +68,9 @@ public class OrderManagerRequest {
* 内置传参使用 * 内置传参使用
*/ */
private String dispatchType; private String dispatchType;
/**
* 半自动派单时间 (分钟)
*/
private Integer dispatchTimeout;
} }
package cn.freemud.management.service.handle; package cn.freemud.management.service.handle;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.util.DateUtil;
import cn.freemud.management.adapter.DeliverySdkAdapter; import cn.freemud.management.adapter.DeliverySdkAdapter;
import cn.freemud.management.entities.dto.request.console.BizDTO; import cn.freemud.management.entities.dto.request.console.*;
import cn.freemud.management.entities.dto.request.console.BusinessInfoDTO;
import cn.freemud.management.entities.dto.request.console.ConsoleResponseDTO;
import cn.freemud.management.entities.dto.request.console.ExpandFieldsDTO;
import cn.freemud.management.entities.dto.request.delivery.DeliveryOrderHaltedRequest; import cn.freemud.management.entities.dto.request.delivery.DeliveryOrderHaltedRequest;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.enums.DeliveryStatus; import cn.freemud.management.enums.DeliveryStatus;
...@@ -24,13 +22,18 @@ import com.freemud.application.sdk.api.log.ApiLog; ...@@ -24,13 +22,18 @@ import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.LogThreadLocal; import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.service.EmailAlertService; import com.freemud.application.sdk.api.service.EmailAlertService;
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.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
...@@ -201,6 +204,117 @@ public class DeliveryHandle { ...@@ -201,6 +204,117 @@ public class DeliveryHandle {
return true; return true;
} }
/**
* 半自动派单 获取时间区间范围
* 对外暴露的方法
* @param dispatchConfig
* @return
*/
public Integer getDispatchTimeout(List<DispatchConfig> dispatchConfig) {
Integer rest = -1;
if (CollectionUtils.isNotEmpty(dispatchConfig)) {
Date currentDate = new Date();
Integer dispatchTimeout = this.getDispatchTimeoutHandle(currentDate, dispatchConfig, DispatchConfig.DATETYPE_TWO);
if (dispatchTimeout != null) {
return dispatchTimeout;
}
int weekDay = DateUtil.getWeekDay(currentDate);
// 是否命中 工作日
boolean isWorkDay = weekDay != 6 && weekDay != 0;
dispatchTimeout = this.getDispatchTimeoutHandle(currentDate, dispatchConfig, (isWorkDay ? DispatchConfig.DATETYPE_ZERO : DispatchConfig.DATETYPE_ONE));
if (dispatchTimeout != null) {
return dispatchTimeout;
}
}
return rest;
}
/**
* 校验时间 是否命中范围
*
* @param currentDate
* @param startTimeStr 时间格式 HH:mm:ss
* @param endTimeStr 时间格式 HH:mm:ss
* @return
*/
private Boolean timeScoreVerify(Date currentDate, String startTimeStr, String endTimeStr) {
if (StringUtils.isEmpty(startTimeStr) || StringUtils.isEmpty(endTimeStr)) {
return Boolean.FALSE;
}
String formatTime = DateUtil.FORMAT_time;
Date nowTime = DateUtil.convert2Date(currentDate, formatTime);
Date startTime = DateUtil.convert2Date(startTimeStr, formatTime);
Date endTime = DateUtil.convert2Date(endTimeStr, formatTime);
if (nowTime.getTime() == startTime.getTime()
|| nowTime.getTime() == endTime.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
}
/**
* 获取配置
*
* @param currentDate
* @param dispatchConfig
* @param dateType
* @return null 表示没有配置
*/
private Integer getDispatchTimeoutHandle(Date currentDate, List<DispatchConfig> dispatchConfig, int dateType) {
List<DispatchConfig> activityDayConfig = dispatchConfig.stream().filter(d -> d.getDateType() == dateType).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(activityDayConfig)) {
for (DispatchConfig d : activityDayConfig) {
if (dateType == DispatchConfig.DATETYPE_TWO) {
// 并且不在 活动日内
boolean isActivityDay = currentDate.after(d.getStartTime()) && currentDate.before(d.getEndTime());
if (!isActivityDay) {
return null;
}
}
Integer peakTime = this.getPeakTime(currentDate, d.getPeakTimeConfigList());
if (Objects.nonNull(peakTime)) {
return peakTime;
}
// 在活动范围内, 没有命中高峰期
return d.getDispatchTime();
}
}
return null;
}
/**
* 返回是否有高峰配置 , 没有就返回 null
*
* @param currentDate
* @param peakTimeConfigList
* @return
*/
private Integer getPeakTime(Date currentDate, List<PeakTimeConfig> peakTimeConfigList) {
if (CollectionUtils.isNotEmpty(peakTimeConfigList)) {
for (PeakTimeConfig peakTimeConfig : peakTimeConfigList) {
boolean isHit = this.timeScoreVerify(currentDate, peakTimeConfig.getStartTime(), peakTimeConfig.getEndTime());
if (isHit) {
return peakTimeConfig.getDispatchTime();
}
}
}
return null;
}
} }
...@@ -18,6 +18,7 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoR ...@@ -18,6 +18,7 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoR
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter; import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.freemud.sdk.api.assortment.order.entities.other.OtherParamDTO;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus; import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest; import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.CancelOrderRequest; import com.freemud.sdk.api.assortment.order.request.order.CancelOrderRequest;
...@@ -71,8 +72,11 @@ public class SaasOrderHandle { ...@@ -71,8 +72,11 @@ public class SaasOrderHandle {
*/ */
public BaseResponse orderConfirm(OrderManagerRequest request, OrderBeanV1 orderBean) { public BaseResponse orderConfirm(OrderManagerRequest request, OrderBeanV1 orderBean) {
//订单接单 //订单接单
BaseQueryOrderRequest orderConfirmRequest = orderSdkAdapter.getOrderConfirmRequest(request.getOperator(), orderBean); OtherParamDTO dto = new OtherParamDTO();
orderConfirmRequest.setDispatchType(request.getDispatchType()); dto.setDispatchType(request.getDispatchType());
dto.setDispatchTimeout(request.getDispatchTimeout());
BaseQueryOrderRequest orderConfirmRequest = orderSdkAdapter.getOrderConfirmRequest(request.getOperator(), orderBean, dto);
orderSdkAdapter.convert2wmDeliveryTimeOut(orderConfirmRequest,this.wmDeliveryTimeOut); orderSdkAdapter.convert2wmDeliveryTimeOut(orderConfirmRequest,this.wmDeliveryTimeOut);
//合阔pos 商户订单状态不自动扭转 //合阔pos 商户订单状态不自动扭转
// 2021-07-07 合阔自动 // 2021-07-07 合阔自动
......
...@@ -26,6 +26,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; ...@@ -26,6 +26,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.PayType; import com.freemud.application.sdk.api.ordercenter.enums.PayType;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderSourceV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderSourceV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq; import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExpressReq; import com.freemud.application.sdk.api.ordercenter.request.OrderExpressReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
...@@ -108,9 +109,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -108,9 +109,14 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
ConsoleResponseDTO<BizDTO> storeMix = this.getStoreMix(query, orderBean.getCompanyId(), orderBean.getShopId()); ConsoleResponseDTO<BizDTO> storeMix = this.getStoreMix(query, orderBean.getCompanyId(), orderBean.getShopId());
if (storeMix!=null && ObjectUtils.equals(ResponseResult.SUCCESS.getCode(), storeMix.getStatusCode())) { if (storeMix!=null && ObjectUtils.equals(ResponseResult.SUCCESS.getCode(), storeMix.getStatusCode())) {
BizDTO bizVO = storeMix.getBizVO(); BizDTO bizVO = storeMix.getBizVO();
if (bizVO!=null && bizVO.getBusinessInfo() !=null) { // fisherman 预约单不走自动|半自动派单逻辑 【【野萃山】手动派单增加半自动配置】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001040800
boolean unReservedExpress = !Objects.equals(orderBean.getNewOrderType(), OrderType.RESERVED_EXPRESS.getIndex());
if (bizVO != null && bizVO.getBusinessInfo() != null && unReservedExpress) {
ExpandFieldsDTO expandFields = bizVO.getBusinessInfo().getExpandFields(); ExpandFieldsDTO expandFields = bizVO.getBusinessInfo().getExpandFields();
request.setDispatchType(expandFields.getDispatchType()); request.setDispatchType(expandFields.getDispatchType());
// fisherman 半自动派单时间获取
request.setDispatchTimeout(deliveryHandle.getDispatchTimeout(expandFields.getDispatchConfig()));
} }
} }
// 订单接单 // 订单接单
......
...@@ -32,4 +32,8 @@ public class POSOrderOperationBaseReq { ...@@ -32,4 +32,8 @@ public class POSOrderOperationBaseReq {
* 内置传参使用 * 内置传参使用
*/ */
private String dispatchType; private String dispatchType;
/**
* 半自动派单时间 (分钟)
*/
private Integer dispatchTimeout;
} }
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