提交 a720167e authored 作者: 杨启发's avatar 杨启发

Merge remote-tracking branch 'origin/test' into test

Former-commit-id: ebee245f
...@@ -4,6 +4,7 @@ import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction; ...@@ -4,6 +4,7 @@ import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction; import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction; import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO; import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsInfoDTO;
import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO; import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.vo.pc.OwnerAccountAllVO; import com.clx.performance.vo.pc.OwnerAccountAllVO;
...@@ -17,6 +18,7 @@ import org.springframework.web.bind.annotation.PostMapping; ...@@ -17,6 +18,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotEmpty;
import java.util.List; import java.util.List;
@FeignClient(name = "clx-performance", configuration = PerformanceClientConfiguration.class) @FeignClient(name = "clx-performance", configuration = PerformanceClientConfiguration.class)
...@@ -51,4 +53,8 @@ public interface PerformanceSDKFeign { ...@@ -51,4 +53,8 @@ public interface PerformanceSDKFeign {
Result<OrderCanExtractWeightDTO> getOrderCanExtractWeight(@RequestParam(value = "orderNo") String orderNo); Result<OrderCanExtractWeightDTO> getOrderCanExtractWeight(@RequestParam(value = "orderNo") String orderNo);
@GetMapping("clx-performance/feign/sdk/queryTaskStatisticsInfo")
Result<BatchOrderStatisticsInfoDTO> queryTaskStatisticsInfo(@RequestParam("orderNoList")
@NotEmpty(message = "订单编号集合不能为空") List<String> orderNoList);
} }
...@@ -5,7 +5,10 @@ import com.clx.open.sdk.request.action.GetOwnerAccountInfoAction; ...@@ -5,7 +5,10 @@ import com.clx.open.sdk.request.action.GetOwnerAccountInfoAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction; import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction; import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO; import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsInfoDTO;
import com.clx.open.sdk.request.dto.OrderStatisticsInfoDTO;
import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO; import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService; import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.OrderGoodsService; import com.clx.performance.service.OrderGoodsService;
...@@ -28,7 +31,7 @@ import org.springframework.beans.BeanUtils; ...@@ -28,7 +31,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import javax.validation.constraints.NotEmpty;
import java.util.List; import java.util.List;
import static com.clx.performance.enums.PerformanceProgressEnum.LogType.PERFORMANCE_ABNORMAL_REASON; import static com.clx.performance.enums.PerformanceProgressEnum.LogType.PERFORMANCE_ABNORMAL_REASON;
...@@ -57,6 +60,8 @@ public class PerformanceSdkFeignController { ...@@ -57,6 +60,8 @@ public class PerformanceSdkFeignController {
private final OrderService orderService;
@ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆") @ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/ownCancelOrderPre") @PostMapping("/ownCancelOrderPre")
...@@ -108,4 +113,12 @@ public class PerformanceSdkFeignController { ...@@ -108,4 +113,12 @@ public class PerformanceSdkFeignController {
} }
@ApiOperation(value = "查询订单相关统计信息", notes = "<br>By:刘海泉")
@GetMapping("/queryTaskStatisticsInfo")
Result<BatchOrderStatisticsInfoDTO> queryTaskStatisticsInfo(@RequestParam("orderNoList")
@NotEmpty(message = "订单编号集合不能为空") List<String> orderNoList){
return Result.ok(orderService.queryTaskStatisticsInfo(orderNoList));
}
} }
package com.clx.performance.controller.temp; package com.clx.performance.controller.temp;
import com.clx.performance.dto.gd.GdRouteDTO; import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.esplus.model.TruckLatestPosESPlus; import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.param.temp.DriverTraceAddParam; import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam; import com.clx.performance.param.temp.TruckTraceAddParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService; import com.clx.performance.service.trace.TruckTraceMqHandlerService;
...@@ -20,12 +20,6 @@ import org.springframework.web.bind.annotation.*; ...@@ -20,12 +20,6 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
...@@ -138,4 +132,16 @@ public class TempTraceController { ...@@ -138,4 +132,16 @@ public class TempTraceController {
} }
@ApiOperation(value = "获取车辆最新位置信息", notes = "<br>By:姜武杰")
@GetMapping("/calDistance")
public Result<Integer> getTruckLatestPos(
@RequestParam("l1") @NotNull(message = "当前经度不能为空") BigDecimal l1,
@RequestParam("l2") @NotNull(message = "当前纬度不能为空") BigDecimal l2,
@RequestParam("l3") @NotNull(message = "货源经度不能为空") BigDecimal l3,
@RequestParam("l4") @NotNull(message = "货源纬度不能为空") BigDecimal l4
) {
return Result.ok( gdService.getShortestRouteDistance(l1,l2,l3,l4));
}
} }
package com.clx.performance.extranal.user; package com.clx.performance.extranal.user;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsInfoDTO;
import com.clx.open.sdk.request.dto.OrderStatisticsInfoDTO;
import com.clx.order.vo.feign.FeignOrderInfoVO; import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
...@@ -19,4 +21,5 @@ public interface OrderService { ...@@ -19,4 +21,5 @@ public interface OrderService {
Optional<Map<String,FeignOrderInfoVO>> queryListOrderByOrderNoList(List<String> orderNoList); Optional<Map<String,FeignOrderInfoVO>> queryListOrderByOrderNoList(List<String> orderNoList);
BatchOrderStatisticsInfoDTO queryTaskStatisticsInfo(List<String> orderNoList);
} }
package com.clx.performance.extranal.user.impl; package com.clx.performance.extranal.user.impl;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsInfoDTO;
import com.clx.open.sdk.request.dto.OrderStatisticsInfoDTO;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderInfoVO; import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.extranal.user.OrderService; import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.math.BigDecimal;
import java.util.*;
@Service @Service
@Slf4j @Slf4j
...@@ -18,6 +28,8 @@ import java.util.Map; ...@@ -18,6 +28,8 @@ import java.util.Map;
public class OrderServiceImpl implements OrderService { public class OrderServiceImpl implements OrderService {
private final OrderFeign orderFeign; private final OrderFeign orderFeign;
private final OrderGoodsDao orderGoodsDao;
private final OrderChildDao orderChildDao;
@Override @Override
public Optional<FeignOrderInfoVO> getOrderInfo(String orderNo) { public Optional<FeignOrderInfoVO> getOrderInfo(String orderNo) {
...@@ -39,4 +51,81 @@ public class OrderServiceImpl implements OrderService { ...@@ -39,4 +51,81 @@ public class OrderServiceImpl implements OrderService {
.filter(Result::succeed) .filter(Result::succeed)
.map(Result::getData); .map(Result::getData);
} }
@Override
public BatchOrderStatisticsInfoDTO queryTaskStatisticsInfo(List<String> orderNoList) {
BatchOrderStatisticsInfoDTO returnResult = new BatchOrderStatisticsInfoDTO();
//构建结果集
Map<String, OrderStatisticsInfoDTO> result = new HashMap<>();
orderNoList.forEach(item->{
OrderStatisticsInfoDTO dto = new OrderStatisticsInfoDTO();
dto.setOrderNo(item);
dto.setPendingTruckNum(0);
dto.setOrderedTruckNum(0);
dto.setNotLoadTruckNum(0);
dto.setArriveSendTruckNum(0);
dto.setArriveReceiveTruckNum(0);
dto.setLoadTruckNum(0);
dto.setUnLoadTruckNum(0);
dto.setLoadWeight(BigDecimal.ZERO);
dto.setUnLoadWeight(BigDecimal.ZERO);
result.put(item,dto);
});
List<OrderGoods> orderGoods = orderGoodsDao.listInField(OrderGoods::getOrderNo, orderNoList);
if(CollectionUtils.isEmpty(orderGoods)){
returnResult.setList(new ArrayList<>(result.values()));
return returnResult;
}
//计算挂单车数
for (OrderGoods orderGood : orderGoods) {
OrderStatisticsInfoDTO dto = result.get(orderGood.getOrderNo());
dto.setPendingTruckNum(dto.getPendingTruckNum() + orderGood.getNeedTruckNum());
result.put(orderGood.getOrderNo(),dto);
}
//计算运单相关统计数据
List<OrderChild> childList = orderChildDao.listInField(OrderChild::getOrderNo, orderNoList);
if(CollectionUtils.isEmpty(childList)){
returnResult.setList(new ArrayList<>(result.values()));
return returnResult;
}
for (OrderChild child : childList) {
OrderStatisticsInfoDTO dto = result.get(child.getOrderNo());
//取消的排除
if(child.getStatus() > OrderChildEnum.Status.COMPLETE.getCode()){
continue;
}
//未取消的运单 接单数
dto.setOrderedTruckNum(dto.getOrderedTruckNum() + 1);
if(child.getStatus() >=OrderChildEnum.Status.CREATED.getCode() &&
child.getStatus() < OrderChildEnum.Status.LOAD.getCode() ){
dto.setNotLoadTruckNum(dto.getNotLoadTruckNum() + 1);
}
//到达货源地
if(Objects.equals(child.getStatus(),OrderChildEnum.Status.ARRIVE_SEND.getCode())){
dto.setArriveSendTruckNum(dto.getArriveSendTruckNum() + 1);
}
//到达卸车地
if(Objects.equals(child.getStatus(),OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())){
dto.setArriveReceiveTruckNum(dto.getArriveReceiveTruckNum() + 1);
}
//已装车
if(child.getStatus() >= OrderChildEnum.Status.LOAD.getCode()){
dto.setLoadTruckNum(dto.getLoadTruckNum() + 1);
dto.setLoadWeight(dto.getLoadWeight().add(child.getLoadNet()));
}
//已卸车
if(child.getStatus() >= OrderChildEnum.Status.UNLOAD.getCode()){
dto.setUnLoadTruckNum(dto.getUnLoadTruckNum() + 1);
dto.setUnLoadWeight(dto.getUnLoadWeight().add(child.getUnloadNet()));
}
result.put(child.getOrderNo(),dto);
}
returnResult.setList(new ArrayList<>(result.values()));
return returnResult;
}
} }
...@@ -2981,15 +2981,15 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2981,15 +2981,15 @@ public class OrderChildServiceImpl implements OrderChildService {
* @Param [truckNo, beginLongitude, beginLatitude, endLongitude, endLatitude] * @Param [truckNo, beginLongitude, beginLatitude, endLongitude, endLatitude]
* @return * @return
**/ **/
public GdRouteDTO getGdRoute(String truckNo, BigDecimal beginLongitude, BigDecimal beginLatitude, public Integer getGdRoute(String truckNo, BigDecimal beginLongitude, BigDecimal beginLatitude,
BigDecimal endLongitude, BigDecimal endLatitude) { BigDecimal endLongitude, BigDecimal endLatitude) {
List<GdRouteDTO> gdRouteDTOS = null; Integer distance = null;
try { try {
gdRouteDTOS = gdService.getRoute(beginLongitude, beginLatitude, endLongitude, endLatitude); distance = gdService.getShortestRouteDistance(beginLongitude, beginLatitude, endLongitude, endLatitude);
} catch (ServiceSystemException e) { } catch (ServiceSystemException e) {
log.info("orderChildExpect==高德地图调用失败,车辆{},异常原因{}", truckNo, e.getMessage()); log.info("orderChildExpect==高德地图调用失败,车辆{},异常原因{}", truckNo, e.getMessage());
} }
return CollectionUtils.isNotEmpty(gdRouteDTOS) ? gdRouteDTOS.get(0) : null; return distance;
} }
@Override @Override
...@@ -3198,10 +3198,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3198,10 +3198,9 @@ public class OrderChildServiceImpl implements OrderChildService {
if (longitude == null || latitude == null) { if (longitude == null || latitude == null) {
return new OrderChildLoadRangeCheckResultVO(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_ERROR.getCode(), TRUCK_LOCATION_ERROR.getMsg()); return new OrderChildLoadRangeCheckResultVO(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_ERROR.getCode(), TRUCK_LOCATION_ERROR.getMsg());
} }
List<GdRouteDTO> route = gdService.getRoute(longitude, latitude, sendLongitude, sendLatitude); Integer distance = gdService.getShortestRouteDistance(longitude, latitude, sendLongitude, sendLatitude);
if (CollectionUtils.isNotEmpty(route)) { if (distance != null) {
GdRouteDTO gdRouteDTO = route.get(0); log.info("truckNo:{} 高德计算距离:{} curr:{},{}, 货源地:{},{}", orderChild.getTruckNo(), distance, longitude, latitude, sendLongitude, sendLatitude);
Integer distance = gdRouteDTO.getDistance();
if (distance > config.allowUploadDistanceMeter()) { if (distance > config.allowUploadDistanceMeter()) {
// 装车位置 超限 // 装车位置 超限
return new OrderChildLoadRangeCheckResultVO(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_OUT_OF_SEND_RANGE.getCode(), String.format(TRUCK_LOCATION_OUT_OF_SEND_RANGE.getMsg(), config.getAllowUploadDistance())); return new OrderChildLoadRangeCheckResultVO(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_OUT_OF_SEND_RANGE.getCode(), String.format(TRUCK_LOCATION_OUT_OF_SEND_RANGE.getMsg(), config.getAllowUploadDistance()));
...@@ -3262,14 +3261,12 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3262,14 +3261,12 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal siteLatitudeY = orderGoods.getSendLatitude(); BigDecimal siteLatitudeY = orderGoods.getSendLatitude();
//调高德获取距离 //调高德获取距离
if (Objects.nonNull(truckLongitudeX) && Objects.nonNull(truckLatitudeY)) { if (Objects.nonNull(truckLongitudeX) && Objects.nonNull(truckLatitudeY)) {
GdRouteDTO route = getGdRoute(truckNo, orderGoods.getSendLongitude(), orderGoods.getSendLatitude(), siteLongitudeX, Integer distance = getGdRoute(truckNo, orderGoods.getSendLongitude(), orderGoods.getSendLatitude(), siteLongitudeX,
siteLatitudeY); siteLatitudeY);
if (route == null) { if (distance == null) {
log.error("高德获取卡车与货源地位置距离失败,orderGoodsNo:{},orderChildNo:{},truckNo:{}", orderGoodsNo, childNo, truckNo); log.error("高德获取卡车与货源地位置距离失败,orderGoodsNo:{},orderChildNo:{},truckNo:{}", orderGoodsNo, childNo, truckNo);
return; return;
} }
//距离
Integer distance = route.getDistance();
// 超出货源地+通知触发距离 // 超出货源地+通知触发距离
if (distance > driverNoticeConfigVO.getNoticeTriggerDistanceMeter()) { if (distance > driverNoticeConfigVO.getNoticeTriggerDistanceMeter()) {
if (Objects.equals(child.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode()) if (Objects.equals(child.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode())
...@@ -3292,8 +3289,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3292,8 +3289,8 @@ public class OrderChildServiceImpl implements OrderChildService {
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode()); child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
orderChildDao.updateEntityByKey(child); orderChildDao.updateEntityByKey(child);
} }
} else if(distance <= 1000){
} else { // 这里的1km的距离是产品需求写死的,不使用通知配置范围
// 未超出货源地+通知触发距离 // 未超出货源地+通知触发距离
// 驶入货源地+通知触发距离范围内了 // 驶入货源地+通知触发距离范围内了
if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode())) { if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode())) {
......
...@@ -9,14 +9,12 @@ import com.msl.common.enums.ResultCodeEnum; ...@@ -9,14 +9,12 @@ import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.dromara.easyes.common.utils.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList; import java.util.*;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
/** /**
* @Author: aiqingguo * @Author: aiqingguo
...@@ -47,6 +45,26 @@ public class GdService { ...@@ -47,6 +45,26 @@ public class GdService {
return getRoute(gaodeKey, originLongitude, originLatitude, destinationLongitude, destinationLatitude); return getRoute(gaodeKey, originLongitude, originLatitude, destinationLongitude, destinationLatitude);
} }
/**
* 获取最短距离路径
* @param originLongitude
* @param originLatitude
* @param destinationLongitude
* @param destinationLatitude
* @return
*/
public Integer getShortestRouteDistance(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
List<GdRouteDTO> routeList = getRoute(gaodeKey, originLongitude, originLatitude, destinationLongitude, destinationLatitude);
if (CollectionUtils.isNotEmpty(routeList)) {
Optional<GdRouteDTO> minRoute = routeList.stream()
.min((r1, r2) -> Double.compare(r1.getDistance(), r2.getDistance()));
return minRoute.map(GdRouteDTO::getDistance).orElse(null);
}
return null;
}
public static List<GdRouteDTO> getRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude, public static List<GdRouteDTO> getRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) { BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
//log.info("高德线路规划开始"); //log.info("高德线路规划开始");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论