liujie
2026-03-04 a6ea8565fd998002513a4ea3ba6030c844e42fad
update
2个文件已修改
39 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpCruiseOrder.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceAreaServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpCruiseOrder.java
@@ -85,10 +85,6 @@
    @TableField("last_order_id")
    private String lastOrderId;
    @ApiModelProperty(value = "订单号")
    @TableField("order_number")
    private String orderNumber;
    @ApiModelProperty(value = "方向 1正2反")
    @TableField("order_reverse")
    private Integer orderReverse;
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceAreaServiceImpl.java
@@ -25,6 +25,7 @@
import com.xiaopeng.map.service.XpElectronicFenceAreaService;
import com.xiaopeng.map.utils.AmapWalkingRouteUtil;
import com.xiaopeng.map.utils.ElectricFenceUtil;
import com.xiaopeng.map.utils.GDMapGeocodingUtil;
import com.xiaopeng.map.utils.GaodeMapService;
import com.xiaopeng.map.utils.holiday.HolidayUtil;
import com.xiaopeng.map.vo.IsInOperationAreaVo;
@@ -37,8 +38,10 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -73,6 +76,9 @@
    @Autowired
    private MongoTemplate mongoTemplate;
    @Resource
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    @Override
@@ -100,11 +106,17 @@
                continue;
            }
            // 是否运营时间内
            Boolean inOperationTime = isInOperationTime(operationStrategy);
            if(!inOperationTime){
                continue;
            if(xpElectronicFence.getFailureType() == 2){
                Boolean inOperationTime = isInOperationTime(operationStrategy);
                if(!inOperationTime){
                    continue;
                }
            }else{
                //永不失效,需要判断开始时间是否到达
                if(LocalDateTime.now().isBefore(xpElectronicFence.getEffectTime())){
                    continue;
                }
            }
            XpElectronicFenceVo vo = new XpElectronicFenceVo();
            // 设置id(使用siteId作为id)
@@ -195,7 +207,12 @@
    public IsInOperationAreaVo isInOperationArea(LonLatDto dto) {
        IsInOperationAreaVo vo = new IsInOperationAreaVo();
        List<XpGeoFencingPolygon> xpGeoFencingPolygons = xpGeoFencingPolygonService.findAll();
        Map<String, String> geocode = gdMapGeocodingUtil.geocode(dto.getLongitude().toString(), dto.getLatitude().toString());
        if(null == geocode){
            throw new RuntimeException("经纬度转换城市code失败");
        }
        String cityCode = geocode.get("cityCode");
        List<XpGeoFencingPolygon> xpGeoFencingPolygons = mongoTemplate.find(new Query(Criteria.where("cityCode").is(cityCode)), XpGeoFencingPolygon.class);
        for (XpGeoFencingPolygon polygon : xpGeoFencingPolygons) {
            if (polygon.getPoints() != null && polygon.getPoints().getCoordinates() != null) {
                // GeoJsonPolygon的coordinates是一个二维数组,第一个元素是外部环
@@ -209,8 +226,12 @@
                    String fenceId = polygon.getFenceId();
                    R<XpElectronicFence> xpElectronicFence = xpElectronicFenceClient.selectById(fenceId);
                    if(xpElectronicFence!=null && null != xpElectronicFence.getData()){
                        String operationStrategy = xpElectronicFence.getData().getOperationStrategy();
                        Boolean inOperationTime = isInOperationTime(operationStrategy);
                        XpElectronicFence electronicFence = xpElectronicFence.getData();
                        String operationStrategy = electronicFence.getOperationStrategy();
                        Boolean inOperationTime = true;
                        if(electronicFence.getFailureType() == 2){
                            inOperationTime = isInOperationTime(operationStrategy);
                        }
                        if(inOperationTime){
                            vo.setStatus("inside");
                            vo.setElectronicAreaId(Long.valueOf(polygon.getAreaId()));