“mitao”
2026-03-04 ecb77dd6c9bd624c323e56ae1350d2b060810633
bugfix
6个文件已修改
101 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpWorkOrder.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/constant/I18nKeyConstant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpElectronicFenceController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpWorkOrder.java
@@ -1,9 +1,7 @@
package com.xiaopeng.api.model.maintenance;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.List;
@@ -46,6 +44,7 @@
    private String problemImage;
    @ApiModelProperty(value = "反馈用户手机号")
    @TableField(updateStrategy = FieldStrategy.NEVER)
    private String feedbackUserPhone;
    @ApiModelProperty(value = "问题来源 目前只有1电话客服")
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java
@@ -196,12 +196,6 @@
    /**
     * 向车辆发送收车指令
     * <p>
     * TODO: 具体发送收车指令的实现
     * 可能需要:
     * 1. 调用车辆控制接口发送收车指令
     * 2. 更新车辆状态为"已收车"
     * </p>
     *
     * @param xpVehicle 车辆信息
     */
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/constant/I18nKeyConstant.java
@@ -85,4 +85,6 @@
    String CRUISE_PLAN_ADD_FAIL = "cruise.plan.add.fail";
    // 编辑巡游计划失败
    String CRUISE_PLAN_EDIT_FAIL = "cruise.plan.edit.fail";
    //手机号格式错误
    String ACCOUNT_FORMAT_ERROR = "account.format.error";
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpElectronicFenceController.java
@@ -136,7 +136,7 @@
    /**
     * 编辑电子围栏
     */
    @PostMapping("/edit")
    @PostMapping("/edit1")
    @ApiOperation(value = "编辑电子围栏")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java
@@ -1,6 +1,7 @@
package com.xiaopeng.operation.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.dto.operation.PointMapQuery;
@@ -33,6 +34,8 @@
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
@@ -91,7 +94,10 @@
        List<Long> areaIds = list.stream().map(XpPoint::getElectronicAreaId).collect(Collectors.toList());
        List<XpElectronicFenceArea> xpElectronicFenceAreas = xpElectronicFenceAreaService.listByIds(areaIds);
        List<Long> fenceIds = xpElectronicFenceAreas.stream().map(XpElectronicFenceArea::getElectronicId).collect(Collectors.toList());
        List<XpElectronicFence> xpElectronicFences = xpElectronicFenceService.listByIds(fenceIds);
        List<XpElectronicFence> xpElectronicFences = new ArrayList<>();
        if (CollUtil.isNotEmpty(fenceIds)) {
            xpElectronicFences = xpElectronicFenceService.listByIds(fenceIds);
        }
        //判断当前点位是否在运营时间范围内
        for (XpPoint xpPoint : list) {
@@ -264,7 +270,11 @@
        List<Long> areaIds = list.stream().map(XpPointsListVo::getElectronicAreaId).collect(Collectors.toList());
        List<XpElectronicFenceArea> xpElectronicFenceAreas = xpElectronicFenceAreaService.listByIds(areaIds);
        List<Long> fenceIds = xpElectronicFenceAreas.stream().map(XpElectronicFenceArea::getElectronicId).collect(Collectors.toList());
        List<XpElectronicFence> xpElectronicFences = xpElectronicFenceService.listByIds(fenceIds);
        List<XpElectronicFence> xpElectronicFences = new ArrayList<>();
        if (CollUtil.isNotEmpty(fenceIds)) {
            xpElectronicFences = xpElectronicFenceService.listByIds(fenceIds);
        }
        for (XpPointsListVo xpPointsListVo : list) {
            Integer operationType = xpPointsListVo.getOperationType();
            if(1 == operationType){
@@ -300,20 +310,11 @@
                    xpPointsListVo.setState(0);
                }
            }
            boolean inTime = getInTime(now, xpPointsListVo.getEffectivePeriod(), xpPointsListVo.getEffectiveTimePeriod());
            if (!inTime) {
                // 不在运营段
                xpPointsListVo.setState(0);
            }
        }
        // 组装数据 并排序 剔除不在运营段的 数据
        List<XpPointsListVo> resultList = list.stream().peek(vo -> vo.setDistance(FastDistanceCalculator.distanceFast(query.getLat(), query.getLon(), vo.getLatitude(), vo.getLongitude()))).filter(vo -> vo.getState() == 1).collect(Collectors.toList());
        List<XpPointsListVo> resultList = list.stream()
                .peek(vo -> vo.setDistance(BigDecimal.valueOf(FastDistanceCalculator.distanceFast(query.getLat(), query.getLon(), vo.getLatitude(), vo.getLongitude())).setScale(0, RoundingMode.HALF_UP).doubleValue()))
                .filter(vo -> vo.getState() == 1).collect(Collectors.toList());
        // 可用点位
        List<XpPointsListVo> availablePoints = resultList.stream().filter(e -> query.getElectronicAreaId() != null && e.getElectronicAreaId().equals(query.getElectronicAreaId())).sorted(Comparator.comparing(XpPointsListVo::getDistance)).collect(Collectors.toList());//
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java
@@ -1,12 +1,16 @@
package com.xiaopeng.operation.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.PhoneUtil;
import com.xiaopeng.api.model.account.SysUser;
import com.xiaopeng.api.model.operation.XpWhitelist;
import com.xiaopeng.api.model.operation.XpWhitelistOperlog;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.common.core.utils.ip.IpUtils;
import com.xiaopeng.common.core.web.domain.AjaxResult;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.operation.constant.I18nKeyConstant;
import com.xiaopeng.operation.dto.WhitelistAddDto;
import com.xiaopeng.operation.mapper.XpWhitelistMapper;
import com.xiaopeng.operation.mapper.XpWhitelistOperlogMapper;
@@ -59,33 +63,42 @@
        }
        List<XpWhitelist> addList = new ArrayList<>();
        List<String> accounts = Arrays.asList(dto.getAccount().split(","));
        StringBuilder operationContent = new StringBuilder("新增账号:");
        StringBuilder accountBuilder = new StringBuilder();
        for (String account : accounts) {
            XpWhitelist xpWhitelist = new XpWhitelist();
            xpWhitelist.setAccount(account);
            xpWhitelist.setStatus(true);
            xpWhitelist.setIsPriorityDispatch(dto.getIsPriorityDispatch());
            xpWhitelist.setWhitelistSource(1);
            xpWhitelist.setCreateBy(sysUser.getCreateBy());
            addList.add(xpWhitelist);
            accountBuilder.append("\"").append(account).append("\"").append(",");
        if (CollUtil.isNotEmpty(accounts)) {
            String notValidPhoneNumber = accounts.stream().filter(item -> !PhoneUtil.isPhone(item)).collect(Collectors.joining(","));
            if (org.apache.commons.lang3.StringUtils.isNotBlank(notValidPhoneNumber)) {
                throw new ServiceException("以下帐号格式不正确:" + notValidPhoneNumber, I18nKeyConstant.ACCOUNT_FORMAT_ERROR, new Object[]{notValidPhoneNumber});
            }
            StringBuilder operationContent = new StringBuilder("新增账号:");
            StringBuilder accountBuilder = new StringBuilder();
            for (String account : accounts) {
                XpWhitelist xpWhitelist = new XpWhitelist();
                xpWhitelist.setAccount(account);
                xpWhitelist.setStatus(true);
                xpWhitelist.setIsPriorityDispatch(dto.getIsPriorityDispatch());
                xpWhitelist.setWhitelistSource(1);
                xpWhitelist.setCreateBy(sysUser.getCreateBy());
                addList.add(xpWhitelist);
                accountBuilder.append("\"").append(account).append("\"").append(",");
            }
            XpWhitelistOperlog xpWhitelistOperlog = new XpWhitelistOperlog();
            xpWhitelistOperlog.setOperationName(sysUser.getNickName());
            xpWhitelistOperlog.setOperationAccount(sysUser.getPhoneNumber());
            xpWhitelistOperlog.setOperationType(1);
            xpWhitelistOperlog.setOperationIp(IpUtils.getIpAddr());
            xpWhitelistOperlog.setOperationAccountId(sysUser.getId());
            StringBuilder content = operationContent.append(accountBuilder.substring(0, accountBuilder.length() - 1));
            xpWhitelistOperlog.setOperationContent(content.toString());
            xpWhitelistOperlogMapper.insert(xpWhitelistOperlog);
            this.saveBatch(addList);
        }
        XpWhitelistOperlog xpWhitelistOperlog = new XpWhitelistOperlog();
        xpWhitelistOperlog.setOperationName(sysUser.getNickName());
        xpWhitelistOperlog.setOperationAccount(sysUser.getPhoneNumber());
        xpWhitelistOperlog.setOperationType(1);
        xpWhitelistOperlog.setOperationIp(IpUtils.getIpAddr());
        xpWhitelistOperlog.setOperationAccountId(sysUser.getId());
        StringBuilder content = operationContent.append(accountBuilder.substring(0, accountBuilder.length() - 1));
        xpWhitelistOperlog.setOperationContent(content.toString());
        xpWhitelistOperlogMapper.insert(xpWhitelistOperlog);
        this.saveBatch(addList);
        return R.ok();
    }
    @Override
    public R editWhitelist(XpWhitelist dto, SysUser sysUser) {
        if (!PhoneUtil.isPhone(dto.getAccount())) {
            throw new ServiceException("以下帐号格式不正确:", I18nKeyConstant.ACCOUNT_FORMAT_ERROR, new Object[]{dto.getAccount()});
        }
        XpWhitelist whitelist = this.getById(dto.getId());
        StringBuilder operationContent = new StringBuilder("编辑账号:");