Commit ea20d687 by 周晓航

开发 订单预计送达时间 需求

Signed-off-by: 周晓航 <xiaohang.zhou@freemud.com>
parent 9c084d53
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<dependency> <dependency>
<groupId>cn.freemud</groupId> <groupId>cn.freemud</groupId>
<artifactId>ordercenter-sdk</artifactId> <artifactId>ordercenter-sdk</artifactId>
<version>1.3.57.RELEASE</version> <version>1.3.58.RELEASE</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
......
...@@ -283,7 +283,11 @@ public class OrderSdkAdapter { ...@@ -283,7 +283,11 @@ public class OrderSdkAdapter {
if(requestVO.getChooseGoods() != null && !requestVO.getChooseGoods().isEmpty()){ if(requestVO.getChooseGoods() != null && !requestVO.getChooseGoods().isEmpty()){
request.setOrderSendCouponRespList(JSONArray.parseArray(JSONObject.toJSONString(requestVO.getChooseGoods()), CreateOrderRequest.ChooseGood.class)); request.setOrderSendCouponRespList(JSONArray.parseArray(JSONObject.toJSONString(requestVO.getChooseGoods()), CreateOrderRequest.ChooseGood.class));
} }
// 【ID1030916】订单查询门店获取预计送达时间
if (requestVO.getEstimateDeliveryCompleteTime() !=null) {
Date time = requestVO.getEstimateDeliveryCompleteTime();
request.setEstimateDeliveryCompleteTime(time.getTime() + "");
}
return request; return request;
} }
......
...@@ -179,6 +179,11 @@ public class BaseCreateOrderRequest extends BaseConfig { ...@@ -179,6 +179,11 @@ public class BaseCreateOrderRequest extends BaseConfig {
*/ */
private Byte marketingType; private Byte marketingType;
/**
* 预计送达时间 调用门店服务计算得出
*/
private Date estimateDeliveryCompleteTime;
@Data @Data
public static class DeliveryTypeInfo { public static class DeliveryTypeInfo {
/** /**
......
...@@ -88,4 +88,9 @@ public class UpdateDeliveryInfoByIdRequest extends BaseConfig { ...@@ -88,4 +88,9 @@ public class UpdateDeliveryInfoByIdRequest extends BaseConfig {
private OrderTaskReq orderTask; private OrderTaskReq orderTask;
/**
* 分配骑手时,三方平台的一个预估送达时间
*/
public Long estimateArriveTime;
} }
...@@ -1105,6 +1105,8 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService { ...@@ -1105,6 +1105,8 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
expressReq.setAutoReceiveTime(processingTime); expressReq.setAutoReceiveTime(processingTime);
expressReq.setOrderStatus(NewOrderStatus.DELIVERING.getIndex()); expressReq.setOrderStatus(NewOrderStatus.DELIVERING.getIndex());
} }
//【ID1031049】 订单接受配送分配骑手状态回调
expressReq.setEstimateArriveTime(request.getEstimateArriveTime());
com.freemud.application.sdk.api.ordercenter.response.BaseResponse response = orderSdkService.updateDeliveryInfo(expressReq, request.getTrackingNo()); com.freemud.application.sdk.api.ordercenter.response.BaseResponse response = orderSdkService.updateDeliveryInfo(expressReq, request.getTrackingNo());
OrderBaseResponse baseResponse = new OrderBaseResponse(); OrderBaseResponse baseResponse = new OrderBaseResponse();
baseResponse.setErrcode(response.getCode() != null ? Integer.parseInt(response.getCode()) : null); baseResponse.setErrcode(response.getCode() != null ? Integer.parseInt(response.getCode()) : null);
......
...@@ -728,6 +728,8 @@ public class OrderAdapter { ...@@ -728,6 +728,8 @@ public class OrderAdapter {
createOrderDto.setOperator(createOrderVo.getUserName()); createOrderDto.setOperator(createOrderVo.getUserName());
createOrderDto.setMenuType(BusinessTypeEnum.getByCode(createOrderVo.getMenuType())); createOrderDto.setMenuType(BusinessTypeEnum.getByCode(createOrderVo.getMenuType()));
createOrderDto.setMarketingType(createOrderVo.getMarketingType()); createOrderDto.setMarketingType(createOrderVo.getMarketingType());
// 【ID1030916】订单查询门店获取预计送达时间
createOrderDto.setEstimateDeliveryCompleteTime(createOrderVo.getUserDeliveryInfoDto().getEstimateDeliveryCompleteTime());
return createOrderDto; return createOrderDto;
} }
...@@ -1191,7 +1193,9 @@ public class OrderAdapter { ...@@ -1191,7 +1193,9 @@ public class OrderAdapter {
} else { } else {
responseVo.setTakeMealTime("我已到店"); responseVo.setTakeMealTime("我已到店");
} }
// 更新该字段 用于 预计送达时间
if (orderExtInfoDto != null && StringUtils.isNotBlank(orderExtInfoDto.getDeliveryHoursDayStart()) if (orderExtInfoDto != null && StringUtils.isNotBlank(orderExtInfoDto.getDeliveryHoursDayStart())
&& StringUtils.isNotBlank(orderExtInfoDto.getPayDate())) { && StringUtils.isNotBlank(orderExtInfoDto.getPayDate())) {
Date createTime = new Date(ordersBean.getGmtCreate()); Date createTime = new Date(ordersBean.getGmtCreate());
Date deliveryHoursDayStart = DateUtil.convert2Date(orderExtInfoDto.getDeliveryHoursDayStart(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS); Date deliveryHoursDayStart = DateUtil.convert2Date(orderExtInfoDto.getDeliveryHoursDayStart(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS);
......
...@@ -3,6 +3,8 @@ package cn.freemud.entities.dto; ...@@ -3,6 +3,8 @@ package cn.freemud.entities.dto;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import java.util.Date;
@Data @Data
@Builder @Builder
public class UserDeliveryInfoDto { public class UserDeliveryInfoDto {
...@@ -72,4 +74,9 @@ public class UserDeliveryInfoDto { ...@@ -72,4 +74,9 @@ public class UserDeliveryInfoDto {
*/ */
private String receiveRegion; private String receiveRegion;
/**
* 预计送达时间
*/
private Date estimateDeliveryCompleteTime;
} }
...@@ -77,4 +77,9 @@ public class CallbackUrlRequestDto { ...@@ -77,4 +77,9 @@ public class CallbackUrlRequestDto {
*/ */
private String exceptionDesc; private String exceptionDesc;
/**
* 分配骑手时,三方平台的一个预估送达时间
*/
public Long estimateArriveTime;
} }
package cn.freemud.entities.dto.store;
import lombok.Builder;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/6/4 下午1:53
* @description :
*/
@Data
@Builder
public class GetEstimateDeliveryRequest extends StoreInfoRequestDto {
/**
* 用户收货地址维度
*/
private String userLatitude;
/**
* 用户收货地址经度
*/
private String userLongitude;
}
package cn.freemud.entities.dto.store;
import lombok.Builder;
import lombok.Data;
import java.util.Date;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/6/4 下午3:42
* @description :
*/
@Data
@Builder
public class QueryDeliverDetailResponse {
/**
* 每增加多少公里(单位米)
*/
private String addRange;
/**
* 配送方式:1-三方物流配送、2-商家自配送
*/
private String deliveryMethod;
/**
* 每增加距离增加多少钱(分)
*/
private String addRangeAmount;
/**
* 配送区域名称
*/
private String areaName;
/**
* 实际需要支付配送费
*/
private Long deliveryAmount;
/**
* 配送费(分)
*/
private String deliveryFee;
/**
* 配送费为零的原因:0:正常,1:超出配送范围
*/
private Integer deliveryFeeZeroReason;
/**
* 基础配送范围(单位米)
*/
private String deliveryRange;
/**
* 配送时间(分钟)
*/
private Integer deliveryTime;
/**
* 外卖起送条件(1:杯数,2:金额)
*/
private Integer deliveryType;
/**
* 起送杯数
*/
private Integer freeDeliveryCup;
/**
* 起送价格(分)
*/
private String minOrderPrice;
/**
* 商户编号
*/
private String partnerId;
/**
* 下单范围,格式:jsonArray,或者半径(米)
*/
private String positionScope;
/**
* 下单范围类型 1手工画范围 2半径服务
*/
private Integer positionScopeType;
/**
* 门店编号
*/
private String storeCode;
/**
* 门店id
*/
private String storeId;
/**
* 预计送达时间
*/
private Date expectArriveTime;
}
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved. * @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目 * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/ */
package cn.freemud.entities.dto; package cn.freemud.entities.dto.store;
import lombok.Data; import lombok.Data;
import lombok.ToString; import lombok.ToString;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved. * @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目 * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/ */
package cn.freemud.entities.dto; package cn.freemud.entities.dto.store;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
......
...@@ -131,6 +131,8 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService { ...@@ -131,6 +131,8 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
requestDto.setRemark(request.getRemark()); requestDto.setRemark(request.getRemark());
requestDto.setExceptionDesc(request.getExceptionDesc()); requestDto.setExceptionDesc(request.getExceptionDesc());
requestDto.setExceptionId(request.getExceptionId()); requestDto.setExceptionId(request.getExceptionId());
//【ID1031049】 订单接受配送分配骑手状态回调
requestDto.setEstimateArriveTime(request.getEstimateArriveTime());
if (StringUtils.isNotBlank(request.getRemark())) { if (StringUtils.isNotBlank(request.getRemark())) {
requestDto.setRemark("配送:" + request.getRemark()); requestDto.setRemark("配送:" + request.getRemark());
} }
......
...@@ -23,6 +23,9 @@ import cn.freemud.entities.dto.delivery.GetDeliveryFlagResponseDto; ...@@ -23,6 +23,9 @@ import cn.freemud.entities.dto.delivery.GetDeliveryFlagResponseDto;
import cn.freemud.entities.dto.order.BusinessDate; import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto; import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.store.GetEstimateDeliveryRequest;
import cn.freemud.entities.dto.store.StoreBaseResponseDto;
import cn.freemud.entities.dto.store.StoreInfoRequestDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
...@@ -33,6 +36,7 @@ import cn.freemud.service.order.OrderRelationFactory; ...@@ -33,6 +36,7 @@ import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.order.OrderRelationService; import cn.freemud.service.order.OrderRelationService;
import cn.freemud.service.thirdparty.DeliveryFeiginClient; import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import cn.freemud.service.thirdparty.ShoppingCartClient; import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.service.thirdparty.StoreBaseApiClient;
import cn.freemud.utils.LogUtil; import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -136,6 +140,8 @@ public class CheckOrder { ...@@ -136,6 +140,8 @@ public class CheckOrder {
@Value("${coco.partnerId}") @Value("${coco.partnerId}")
private String cocoPartnerId; private String cocoPartnerId;
@Autowired
private StoreBaseApiClient storeBaseApiClient;
/** /**
* 下单会员相关校验 * 下单会员相关校验
*/ */
...@@ -320,7 +326,7 @@ public class CheckOrder { ...@@ -320,7 +326,7 @@ public class CheckOrder {
} }
storeDeliveryInfoDto.setEnableTakeaway(true); storeDeliveryInfoDto.setEnableTakeaway(true);
// 校验收货地址是否可配送 // 校验收货地址是否可配送 fisherman -> 获取门店预计送达时间
checkReceiveAddress(storeDeliveryInfoDto, createOrderVo,storeResponseDto.getStoreCode()); checkReceiveAddress(storeDeliveryInfoDto, createOrderVo,storeResponseDto.getStoreCode());
} }
return pushOrderTime; return pushOrderTime;
...@@ -902,6 +908,11 @@ public class CheckOrder { ...@@ -902,6 +908,11 @@ public class CheckOrder {
if (BusinessTypeEnum.SAAS_DELIVERY.getCode().equals(createOrderVo.getMenuType())) { if (BusinessTypeEnum.SAAS_DELIVERY.getCode().equals(createOrderVo.getMenuType())) {
String s = this.checkDeliveryType(createOrderVo, storeCode, trackingNo); String s = this.checkDeliveryType(createOrderVo, storeCode, trackingNo);
userDeliveryInfoDto.getStoreDeliveryInfoDto().setDeliveryType(s); userDeliveryInfoDto.getStoreDeliveryInfoDto().setDeliveryType(s);
// 【ID1030916】订单查询门店获取预计送达时间 并且不是预约单
if (StringUtils.isNotEmpty(createOrderVo.getExpectTime())) {
userDeliveryInfoDto.setEstimateDeliveryCompleteTime(getEstimateDeliveryCompleteTime(createOrderVo.getLatitude(), createOrderVo.getLongitude(), storeDeliveryInfoDto.getPartnerId(), storeDeliveryInfoDto.getStoreId()));
}
} }
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());
...@@ -919,7 +930,38 @@ public class CheckOrder { ...@@ -919,7 +930,38 @@ public class CheckOrder {
createOrderVo.setUserDeliveryInfoDto(userDeliveryInfoDto); createOrderVo.setUserDeliveryInfoDto(userDeliveryInfoDto);
} }
/**
* 获取 用户预计送达时间 距离
* @param userLat 用户纬度
* @param userLong 用户经度
* @param partnerId 商户号
* @param storeCode 门店号
* @return
*/
private Date getEstimateDeliveryCompleteTime(String userLat,
String userLong,
String partnerId,
String storeCode) {
boolean check = StringUtils.isEmpty(userLat) ||
StringUtils.isEmpty(userLong) ||
StringUtils.isEmpty(partnerId) ||
StringUtils.isEmpty(storeCode);
if (check) {
throw new ServiceException(ResponseResult.PARAMETER_MISSING);
}
// 调用门店接口 获取时间 Fisherman
GetEstimateDeliveryRequest request = GetEstimateDeliveryRequest.builder().userLatitude(userLat).userLongitude(userLong).build();
request.setPartnerId(partnerId);
request.setStoreCode(storeCode);
StoreBaseResponseDto<cn.freemud.entities.dto.store.QueryDeliverDetailResponse> responseDto = storeBaseApiClient.queryDeliverDetail(request);
if (responseDto == null) {
throw new ServiceException(ResponseResult.SYSTEM_BUSINESS_ERROR);
}
if(responseDto.getStatusCode() != 100 || responseDto.getBizVO() == null){
throw new ServiceException(ResponseResult.STORE_NOT_FOUND);
}
return responseDto.getBizVO().getExpectArriveTime();
}
public void checkCardCode(String partnerId, String memberId, String cardCode) { public void checkCardCode(String partnerId, String memberId, String cardCode) {
...@@ -992,6 +1034,14 @@ public class CheckOrder { ...@@ -992,6 +1034,14 @@ public class CheckOrder {
return createOrderVo.getMarketingType() != null && OrderMarketType.COLLAGE.getIndex() == createOrderVo.getMarketingType(); return createOrderVo.getMarketingType() != null && OrderMarketType.COLLAGE.getIndex() == createOrderVo.getMarketingType();
} }
/**
* 校验配送信息
* 这里可以获取用户的 预计送达时间
* @param createOrderVo
* @param storeCode
* @param trackingNo
* @return
*/
public String checkDeliveryType(CreateOrderVo createOrderVo,String storeCode,String trackingNo) { public String checkDeliveryType(CreateOrderVo createOrderVo,String storeCode,String trackingNo) {
String code = ""; String code = "";
QueryDeliveryRequest request = new QueryDeliveryRequest(); QueryDeliveryRequest request = new QueryDeliveryRequest();
......
...@@ -3079,7 +3079,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3079,7 +3079,7 @@ public class OrderServiceImpl implements Orderservice {
} }
/** /**
* 创建普通订单 * 创建普通订单 saas会走 app会走
*/ */
public CreateOrderResponse createOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto, public CreateOrderResponse createOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto,
OrderExtendedReq orderExtendedReq, OrderClientType orderClient, String appId) { OrderExtendedReq orderExtendedReq, OrderClientType orderClient, String appId) {
......
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.store.GetEstimateDeliveryRequest;
import cn.freemud.entities.dto.store.QueryDeliverDetailResponse;
import cn.freemud.entities.dto.store.StoreBaseResponseDto;
import cn.freemud.entities.dto.store.StoreInfoRequestDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/6/4 下午2:04
* @description : 门店基础服务
*/
@FeignClient(name = "CONSOLE-API")
@RequestMapping(value = "/storecenter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public interface StoreBaseApiClient {
@PostMapping(value = "/storedelivery/v2/queryDeliverDetail")
StoreBaseResponseDto<QueryDeliverDetailResponse> queryDeliverDetail(@RequestBody StoreInfoRequestDto request);
}
...@@ -83,4 +83,10 @@ public class OrderExpressReq { ...@@ -83,4 +83,10 @@ public class OrderExpressReq {
*/ */
private Integer orderStatus; private Integer orderStatus;
/**
* 分配骑手时,三方平台的一个预估送达时间
*/
public Long estimateArriveTime;
} }
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