xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpTestPlanClientFallbackFactory.java
@@ -4,7 +4,6 @@ import com.xiaopeng.api.model.operation.XpTestPlan; import com.xiaopeng.api.model.operation.XpTestPlanPoint; import com.xiaopeng.api.model.operation.XpTestPlanVehicle; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.common.core.domain.R; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpTestPointClientFallbackFactory.java
@@ -1,30 +1,10 @@ package com.xiaopeng.api.factory.operation; import com.xiaopeng.api.dto.map.XpPointExportExcelQuery; import com.xiaopeng.api.dto.operation.PointAddDto; import com.xiaopeng.api.dto.operation.PointMapQuery; import com.xiaopeng.api.dto.operation.PointUpdateDto; import com.xiaopeng.api.dto.operation.XpPointEnableDisableDto; import com.xiaopeng.api.dto.order.HistoryEndPointsDto; import com.xiaopeng.api.dto.order.HistoryStartPointsDto; import com.xiaopeng.api.feignClient.operation.XpPointClient; import com.xiaopeng.api.feignClient.operation.XpTestPointClient; import com.xiaopeng.api.model.operation.XpElectronicFenceArea; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.api.query.operation.PointListQuery; import com.xiaopeng.api.query.operation.PointPageListListQuery; import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo; import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; @Slf4j @Component xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpTestPlanClient.java
@@ -4,7 +4,6 @@ import com.xiaopeng.api.model.operation.XpTestPlan; import com.xiaopeng.api.model.operation.XpTestPlanPoint; import com.xiaopeng.api.model.operation.XpTestPlanVehicle; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpTestPointClient.java
@@ -1,7 +1,6 @@ package com.xiaopeng.api.feignClient.operation; import com.xiaopeng.api.factory.operation.XpTestPointClientFallbackFactory; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/map/XpTestPoint.java
File was renamed from xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpTestPoint.java @@ -1,4 +1,4 @@ package com.xiaopeng.api.model.operation; package com.xiaopeng.api.model.map; import com.baomidou.mybatisplus.annotation.*; import com.xiaopeng.common.core.web.domain.BaseModel; xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpTestPointManagementController.java
File was renamed from xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpTestPointManagementController.java @@ -1,4 +1,4 @@ package com.xiaopeng.operation.controller; package com.xiaopeng.map.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -7,21 +7,20 @@ import com.xiaopeng.api.dto.operation.PointAddDto; import com.xiaopeng.api.dto.operation.PointUpdateDto; import com.xiaopeng.api.dto.operation.XpPointEnableDisableDto; import com.xiaopeng.api.model.map.XpTestPoint; import com.xiaopeng.api.model.operation.XpElectronicFence; import com.xiaopeng.api.model.operation.XpElectronicFenceArea; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.api.query.operation.PointListQuery; import com.xiaopeng.api.query.operation.PointPageListListQuery; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.controller.BaseController; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.dto.XpPointSpecialDto; import com.xiaopeng.operation.service.IXpElectronicFenceAreaService; import com.xiaopeng.operation.service.IXpElectronicFenceService; import com.xiaopeng.operation.service.XpPointService; import com.xiaopeng.operation.service.XpTestPointService; import com.xiaopeng.operation.vo.SpecialPointListVo; import com.xiaopeng.operation.vo.SpecialPointVo; import com.xiaopeng.map.dto.XpPointSpecialDto; import com.xiaopeng.map.service.XpElectronicFenceAreaService; import com.xiaopeng.map.service.XpElectronicFenceService; import com.xiaopeng.map.service.XpTestPointService; import com.xiaopeng.map.vo.SpecialPointListVo; import com.xiaopeng.map.vo.SpecialPointVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -44,9 +43,9 @@ @Resource private XpTestPointService xpTestPointService; @Resource private IXpElectronicFenceAreaService xpElectronicFenceAreaService; private XpElectronicFenceAreaService xpElectronicFenceAreaService; @Resource private IXpElectronicFenceService xpElectronicFenceService; private XpElectronicFenceService xpElectronicFenceService; @ApiOperation(value = "获取所有运营中的区域", response = XpElectronicFenceArea.class) xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/dto/NearestDto.java
@@ -17,4 +17,5 @@ @ApiModelProperty(value = "经度") @NotNull(message = "经度不能为空") private Double longitude; } xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/mapper/XpTestPointMapper.java
File was renamed from xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpTestPointMapper.java @@ -1,15 +1,14 @@ package com.xiaopeng.operation.mapper; package com.xiaopeng.map.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xiaopeng.api.dto.operation.PointMapQuery; import com.xiaopeng.api.model.operation.XpPoint; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.api.model.map.XpTestPoint; import com.xiaopeng.api.query.operation.PointListQuery; import com.xiaopeng.api.query.operation.PointPageListListQuery; import com.xiaopeng.api.vo.order.XpPointsListVo; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.query.PointByNameQuery; import com.xiaopeng.map.query.PointByNameQuery; import org.apache.ibatis.annotations.Param; import java.util.List; xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/XpTestPointService.java
File was renamed from xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/XpTestPointService.java @@ -1,21 +1,19 @@ package com.xiaopeng.operation.service; package com.xiaopeng.map.service; import com.baomidou.mybatisplus.extension.service.IService; import com.xiaopeng.api.dto.operation.PointMapQuery; import com.xiaopeng.api.dto.order.HistoryEndPointsDto; import com.xiaopeng.api.dto.order.HistoryStartPointsDto; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.api.model.map.XpTestPoint; import com.xiaopeng.api.query.operation.PointListQuery; import com.xiaopeng.api.query.operation.PointPageListListQuery; import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo; import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo; import com.xiaopeng.api.vo.order.XpPointsSearchVo; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.dto.NearestDto; import com.xiaopeng.operation.query.PointByNameQuery; import com.xiaopeng.operation.vo.NearestVo; import com.xiaopeng.operation.vo.OrderDistanceVo; import com.xiaopeng.map.dto.NearestDto; import com.xiaopeng.map.vo.NearestVo; import com.xiaopeng.map.vo.OrderDistanceVo; import javax.validation.Valid; import java.time.LocalTime; @@ -32,10 +30,6 @@ */ public interface XpTestPointService extends IService<XpTestPoint> { /** * 获取附近上车站点 */ NearestVo nearest(@Valid NearestDto dto); /** xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpTestPointServiceImpl.java
File was renamed from xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpTestPointServiceImpl.java @@ -1,4 +1,4 @@ package com.xiaopeng.operation.service.impl; package com.xiaopeng.map.service.serviceimpl; import cn.hutool.core.collection.CollUtil; @@ -7,29 +7,29 @@ import com.xiaopeng.api.dto.operation.PointMapQuery; import com.xiaopeng.api.dto.order.HistoryEndPointsDto; import com.xiaopeng.api.dto.order.HistoryStartPointsDto; import com.xiaopeng.api.model.operation.*; import com.xiaopeng.api.model.map.XpTestPoint; import com.xiaopeng.api.model.operation.XpElectronicFence; import com.xiaopeng.api.model.operation.XpElectronicFenceArea; import com.xiaopeng.api.model.operation.XpSystemSetting; import com.xiaopeng.api.query.operation.PointListQuery; import com.xiaopeng.api.query.operation.PointPageListListQuery; import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo; import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo; import com.xiaopeng.api.vo.order.XpPointsListVo; import com.xiaopeng.api.vo.order.XpPointsSearchVo; import com.xiaopeng.common.core.constant.CacheConstants; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.redis.service.RedisService; import com.xiaopeng.operation.dto.NearestDto; import com.xiaopeng.operation.mapper.XpSystemSettingMapper; import com.xiaopeng.operation.mapper.XpTestPointMapper; import com.xiaopeng.operation.query.PointByNameQuery; import com.xiaopeng.operation.service.IXpElectronicFenceAreaService; import com.xiaopeng.operation.service.IXpElectronicFenceService; import com.xiaopeng.operation.service.XpTestPointService; import com.xiaopeng.operation.utils.TimeRangeChecker; import com.xiaopeng.operation.utils.holiday.HolidayUtil; import com.xiaopeng.operation.utils.map.FastDistanceCalculator; import com.xiaopeng.operation.vo.NearestNextVo; import com.xiaopeng.operation.vo.NearestVo; import com.xiaopeng.operation.vo.OrderDistanceVo; import com.xiaopeng.map.dto.NearestDto; import com.xiaopeng.map.mapper.XpSystemSettingMapper; import com.xiaopeng.map.mapper.XpTestPointMapper; import com.xiaopeng.map.service.XpElectronicFenceAreaService; import com.xiaopeng.map.service.XpElectronicFenceService; import com.xiaopeng.map.service.XpTestPointService; import com.xiaopeng.map.utils.TimeRangeChecker; import com.xiaopeng.map.utils.holiday.HolidayUtil; import com.xiaopeng.map.utils.map.map.FastDistanceCalculator; import com.xiaopeng.map.vo.NearestNextVo; import com.xiaopeng.map.vo.NearestVo; import com.xiaopeng.map.vo.OrderDistanceVo; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -65,112 +65,10 @@ private HolidayUtil holidayUtil; @Resource private IXpElectronicFenceAreaService xpElectronicFenceAreaService; private XpElectronicFenceAreaService xpElectronicFenceAreaService; @Resource private IXpElectronicFenceService xpElectronicFenceService; @Override public NearestVo nearest(NearestDto dto) { // 走缓存 Object orderDistanceObj = redisService.getCacheObject(CacheConstants.NEAR_POINT_DISTANCE); Integer orderDistance; if (orderDistanceObj != null) { orderDistance = Integer.valueOf(orderDistanceObj.toString()); } else { XpSystemSetting xpSystemSetting = xpSystemSettingMapper.selectOne(null); orderDistance = xpSystemSetting.getNearPointDistance(); } List<XpTestPoint> list1 = list(new LambdaQueryWrapper<XpTestPoint>().eq(XpTestPoint::getOperationStatus, 2).eq(XpTestPoint::getPointType,1).isNotNull(XpTestPoint::getElectronicAreaId)); if(list1.size()<2){ return new NearestVo(); } // 获取所有的站点信息 List<XpTestPoint> list = list(new LambdaQueryWrapper<XpTestPoint>().eq(XpTestPoint::getOperationStatus, 2).eq(XpTestPoint::getPointType,1).isNotNull(XpTestPoint::getElectronicAreaId) // 添加距离计算字段 .apply("ST_Distance_Sphere(point({0}, {1}), point(point_lon, point_lat)) <= {2}", dto.getLongitude(), dto.getLatitude(), orderDistance)); list = list.stream().filter(e->e.getElectronicAreaId().equals(dto.getElectronicAreaId())).collect(Collectors.toList()); NearestVo nearestVo = new NearestVo(); if(list.isEmpty()){ nearestVo.setPoints(new ArrayList<>()); nearestVo.setTotal(0); return nearestVo; } List<NearestNextVo> nearestNextVos = new ArrayList<>(); LocalTime now = LocalTime.now(); List<Long> areaIds = list.stream().map(XpTestPoint::getElectronicAreaId).collect(Collectors.toList()); List<XpElectronicFenceArea> xpElectronicFenceAreas = xpElectronicFenceAreaService.listByIds(areaIds); List<Long> fenceIds = xpElectronicFenceAreas.stream().map(XpElectronicFenceArea::getElectronicId).collect(Collectors.toList()); List<XpElectronicFence> xpElectronicFences = new ArrayList<>(); if (CollUtil.isNotEmpty(fenceIds)) { xpElectronicFences = xpElectronicFenceService.listByIds(fenceIds); } //判断当前点位是否在运营时间范围内 for (XpTestPoint xpPoint : list) { Integer operationType = xpPoint.getOperationType(); if(1 == operationType){ //与运营区同步 XpElectronicFenceArea xpElectronicFenceArea = xpElectronicFenceAreas.stream().filter(s -> s.getId().equals(xpPoint.getElectronicAreaId())).findFirst().orElse(null); if(null == xpElectronicFenceArea){ continue; } XpElectronicFence xpElectronicFence = xpElectronicFences.stream().filter(s -> s.getId().equals(xpElectronicFenceArea.getElectronicId())).findFirst().orElse(null); if(null == xpElectronicFence){ continue; } //失效类型 1=永不失效 2=定时失效 Integer failureType = xpElectronicFence.getFailureType(); //永不失效,但是还未到开始时间 if(1 == failureType && LocalDateTime.now().isBefore(xpElectronicFence.getEffectTime())){ continue; }else if(2 == failureType && (LocalDateTime.now().isBefore(xpElectronicFence.getEffectTime()) || LocalDateTime.now().isAfter(xpElectronicFence.getFailureTime()))){ //定时失效,但是当前时间不在时间范围内 continue; } }else{ //自定义时间段 // 判断是否在时间段内 boolean intime = getInTime(now, xpPoint.getEffectivePeriod(), xpPoint.getEffectiveTimePeriod()); if (!intime) { continue; } } // 计算距离 小于的站点 double v = FastDistanceCalculator.distanceFast(dto.getLatitude(), dto.getLongitude(), xpPoint.getPointLat(), xpPoint.getPointLon()); // m做判断 if ((v) < orderDistance) { NearestNextVo nearestNextVo = new NearestNextVo(); nearestNextVo.setId(xpPoint.getId()); nearestNextVo.setName(xpPoint.getPointName()); nearestNextVo.setLatitude(xpPoint.getPointLat()); nearestNextVo.setLongitude(xpPoint.getPointLon()); nearestNextVo.setDistance(new BigDecimal(v).setScale(2, RoundingMode.HALF_UP).doubleValue()); nearestNextVo.setAddress(xpPoint.getPointAddress()); nearestNextVo.setTime(xpPoint.getParkingTimeLimit()); nearestNextVo.setElectronicAreaId(xpPoint.getElectronicAreaId()); nearestNextVos.add(nearestNextVo); } } if (!nearestNextVos.isEmpty()) { nearestNextVos = nearestNextVos.stream().sorted(Comparator.comparing(NearestNextVo::getDistance)).collect(Collectors.toList()); } nearestVo.setPoints(nearestNextVos); nearestVo.setTotal(nearestNextVos.size()); return nearestVo; } private XpElectronicFenceService xpElectronicFenceService; xp-robotaxi-map-boot/src/main/resources/mapper/XpTestPointMapper.xml
File was renamed from xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpTestPointMapper.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xiaopeng.operation.mapper.XpTestPointMapper"> <mapper namespace="com.xiaopeng.map.mapper.XpTestPointMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.xiaopeng.api.model.operation.XpTestPoint"> <resultMap id="BaseResultMap" type="com.xiaopeng.api.model.map.XpTestPoint"> <id column="id" property="id" /> <result column="point_name" property="pointName" /> <result column="point_poi" property="pointPoi" /> @@ -30,7 +30,7 @@ <sql id="Base_Column_List"> id,electronic_area_id, point_name, point_poi, point_number, operation_status, point_type, verification_status, parking_time_limit, operation_type, effective_period, effective_time_period, remarks, point_pictures, point_lon, point_lat, is_deleted, create_time, update_time, create_by, update_by </sql> <select id="pointMap" resultType="com.xiaopeng.api.model.operation.XpTestPoint"> <select id="pointMap" resultType="com.xiaopeng.api.model.map.XpTestPoint"> select t1.*, ROUND( 6378.138 * 2 * ASIN( @@ -66,7 +66,7 @@ </if> order by distance asc </select> <select id="listAll" resultType="com.xiaopeng.api.model.operation.XpTestPoint"> <select id="listAll" resultType="com.xiaopeng.api.model.map.XpTestPoint"> select t1.* from xp_test_point t1 where t1.is_deleted = 0 @@ -108,7 +108,7 @@ </if> </select> <select id="pageList" resultType="com.xiaopeng.api.model.operation.XpTestPoint"> <select id="pageList" resultType="com.xiaopeng.api.model.map.XpTestPoint"> select xp.id,xp.point_number as pointNumber,xp.point_name as pointName,xp.point_poi as pointPoi, xp.point_address as pointAddress, xp.point_lon as pointLon,xp.point_lat as pointLat,xp.create_time as createTime,xp.create_by as createBy xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpTestPlanController.java
@@ -5,7 +5,6 @@ import com.xiaopeng.api.model.operation.XpTestPlan; import com.xiaopeng.api.model.operation.XpTestPlanPoint; import com.xiaopeng.api.model.operation.XpTestPlanVehicle; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.dto.XpTestPlanAddDTO; @@ -14,7 +13,6 @@ import com.xiaopeng.operation.service.IXpTestPlanPointService; import com.xiaopeng.operation.service.IXpTestPlanService; import com.xiaopeng.operation.service.IXpTestPlanVehicleService; import com.xiaopeng.operation.service.XpTestPointService; import com.xiaopeng.operation.vo.XpTestPlanDetailVO; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpTestPlanServiceImpl.java
@@ -9,7 +9,6 @@ import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.operation.XpTestPlanPoint; import com.xiaopeng.api.model.operation.XpTestPlanVehicle; import com.xiaopeng.api.model.operation.XpTestPoint; import com.xiaopeng.api.model.operation.XpTestPlan; import com.xiaopeng.api.model.vehicleConvoy.XpFleet; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; @@ -17,12 +16,9 @@ import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.constant.I18nKeyConstant; import com.xiaopeng.operation.dto.XpCruisePlanAddDTO; import com.xiaopeng.operation.dto.XpCruisePlanEditDTO; import com.xiaopeng.operation.dto.XpTestPlanAddDTO; import com.xiaopeng.operation.dto.XpTestPlanEditDTO; import com.xiaopeng.operation.mapper.XpTestPlanMapper; import com.xiaopeng.operation.query.CruisePlanQuery; import com.xiaopeng.operation.query.TestPlanQuery; import com.xiaopeng.operation.service.*; import com.xiaopeng.operation.vo.*;