Commit ea20d687 by 周晓航

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

Signed-off-by: 周晓航 <xiaohang.zhou@freemud.com>
parent 9c084d53
......@@ -38,7 +38,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>ordercenter-sdk</artifactId>
<version>1.3.57.RELEASE</version>
<version>1.3.58.RELEASE</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -283,7 +283,11 @@ public class OrderSdkAdapter {
if(requestVO.getChooseGoods() != null && !requestVO.getChooseGoods().isEmpty()){
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;
}
......
......@@ -179,6 +179,11 @@ public class BaseCreateOrderRequest extends BaseConfig {
*/
private Byte marketingType;
/**
* 预计送达时间 调用门店服务计算得出
*/
private Date estimateDeliveryCompleteTime;
@Data
public static class DeliveryTypeInfo {
/**
......
......@@ -88,4 +88,9 @@ public class UpdateDeliveryInfoByIdRequest extends BaseConfig {
private OrderTaskReq orderTask;
/**
* 分配骑手时,三方平台的一个预估送达时间
*/
public Long estimateArriveTime;
}
......@@ -1105,6 +1105,8 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
expressReq.setAutoReceiveTime(processingTime);
expressReq.setOrderStatus(NewOrderStatus.DELIVERING.getIndex());
}
//【ID1031049】 订单接受配送分配骑手状态回调
expressReq.setEstimateArriveTime(request.getEstimateArriveTime());
com.freemud.application.sdk.api.ordercenter.response.BaseResponse response = orderSdkService.updateDeliveryInfo(expressReq, request.getTrackingNo());
OrderBaseResponse baseResponse = new OrderBaseResponse();
baseResponse.setErrcode(response.getCode() != null ? Integer.parseInt(response.getCode()) : null);
......
......@@ -728,6 +728,8 @@ public class OrderAdapter {
createOrderDto.setOperator(createOrderVo.getUserName());
createOrderDto.setMenuType(BusinessTypeEnum.getByCode(createOrderVo.getMenuType()));
createOrderDto.setMarketingType(createOrderVo.getMarketingType());
// 【ID1030916】订单查询门店获取预计送达时间
createOrderDto.setEstimateDeliveryCompleteTime(createOrderVo.getUserDeliveryInfoDto().getEstimateDeliveryCompleteTime());
return createOrderDto;
}
......@@ -1191,7 +1193,9 @@ public class OrderAdapter {
} else {
responseVo.setTakeMealTime("我已到店");
}
// 更新该字段 用于 预计送达时间
if (orderExtInfoDto != null && StringUtils.isNotBlank(orderExtInfoDto.getDeliveryHoursDayStart())
&& StringUtils.isNotBlank(orderExtInfoDto.getPayDate())) {
Date createTime = new Date(ordersBean.getGmtCreate());
Date deliveryHoursDayStart = DateUtil.convert2Date(orderExtInfoDto.getDeliveryHoursDayStart(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS);
......
......@@ -3,6 +3,8 @@ package cn.freemud.entities.dto;
import lombok.Builder;
import lombok.Data;
import java.util.Date;
@Data
@Builder
public class UserDeliveryInfoDto {
......@@ -72,4 +74,9 @@ public class UserDeliveryInfoDto {
*/
private String receiveRegion;
/**
* 预计送达时间
*/
private Date estimateDeliveryCompleteTime;
}
......@@ -77,4 +77,9 @@ public class CallbackUrlRequestDto {
*/
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 @@
* @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.ToString;
......
......@@ -10,7 +10,7 @@
* @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.NoArgsConstructor;
......
......@@ -131,6 +131,8 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
requestDto.setRemark(request.getRemark());
requestDto.setExceptionDesc(request.getExceptionDesc());
requestDto.setExceptionId(request.getExceptionId());
//【ID1031049】 订单接受配送分配骑手状态回调
requestDto.setEstimateArriveTime(request.getEstimateArriveTime());
if (StringUtils.isNotBlank(request.getRemark())) {
requestDto.setRemark("配送:" + request.getRemark());
}
......
......@@ -23,6 +23,9 @@ import cn.freemud.entities.dto.delivery.GetDeliveryFlagResponseDto;
import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
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.enums.*;
import cn.freemud.interceptor.ServiceException;
......@@ -33,6 +36,7 @@ import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.order.OrderRelationService;
import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.service.thirdparty.StoreBaseApiClient;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
......@@ -136,6 +140,8 @@ public class CheckOrder {
@Value("${coco.partnerId}")
private String cocoPartnerId;
@Autowired
private StoreBaseApiClient storeBaseApiClient;
/**
* 下单会员相关校验
*/
......@@ -320,7 +326,7 @@ public class CheckOrder {
}
storeDeliveryInfoDto.setEnableTakeaway(true);
// 校验收货地址是否可配送
// 校验收货地址是否可配送 fisherman -> 获取门店预计送达时间
checkReceiveAddress(storeDeliveryInfoDto, createOrderVo,storeResponseDto.getStoreCode());
}
return pushOrderTime;
......@@ -902,6 +908,11 @@ public class CheckOrder {
if (BusinessTypeEnum.SAAS_DELIVERY.getCode().equals(createOrderVo.getMenuType())) {
String s = this.checkDeliveryType(createOrderVo, storeCode, trackingNo);
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.setReceiveMobile(StringUtils.isEmpty(receiveAddressResult.getMobile()) ? receiveAddressResult.getReceiveMobile() : receiveAddressResult.getMobile());
......@@ -919,7 +930,38 @@ public class CheckOrder {
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) {
......@@ -992,6 +1034,14 @@ public class CheckOrder {
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) {
String code = "";
QueryDeliveryRequest request = new QueryDeliveryRequest();
......
......@@ -3079,7 +3079,7 @@ public class OrderServiceImpl implements Orderservice {
}
/**
* 创建普通订单
* 创建普通订单 saas会走 app会走
*/
public CreateOrderResponse createOrder(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto,
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 {
*/
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