liujie
2026-03-13 3632e38fe93105092e58c30c9043585d5a9a7489
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi
17个文件已修改
165 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsRoleMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpOperationUserClientFallbackFactory.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationUserClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/pom.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleRepairController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/XpVehicleRepairReturnDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/XpVehicleRepairStartDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/utils/GDMapGeocodingUtil.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpInvitationCodeController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-push-message-boot/pom.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
@@ -249,5 +249,16 @@
        xpOperationsUserService.importOperationsUser(file);
        return R.ok();
    }
    /**
     * 根据手机号模糊查询用户(内部接口)
     *
     * @param phoneNumber 手机号
     * @return 用户信息列表
     */
    @ApiOperation(value = "根据手机号模糊查询用户及角色信息", tags = {"内部接口"})
    @PostMapping("/inner/xpOperationsUser/getByPhoneNumber")
    public R<List<XpOperationsUser>> getByPhoneNumber(@RequestParam String phoneNumber) {
        List<XpOperationsUser> result = xpOperationsUserService.getByPhoneNumber(phoneNumber);
        return R.ok(result);
    }
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java
@@ -121,4 +121,11 @@
     * @return
     */
    List<XpOperationsUserWithRoleVO> selectUsersWithRoleByIds(List<Long> ids);
    /**
     *根据手机号模糊查询用户
     * @param phoneNumber
     * @return
     */
    List<XpOperationsUser> getByPhoneNumber(String phoneNumber);
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
@@ -362,9 +362,9 @@
            xpOperationsUser.setNickName(exportOperationsUserVo.getNickName());
            xpOperationsUser.setUniqueNumber(exportOperationsUserVo.getUniqueNumber());
            xpOperationsUser.setAvatar(exportOperationsUserVo.getAvatar());
            boolean isPhone = PhoneUtil.isPhone(exportOperationsUserVo.getPhoneNumber());
            boolean isPhone = PhoneUtil.isMobile(exportOperationsUserVo.getPhoneNumber());
            if (!isPhone) {
                throw new ServiceException("以下帐号格式不正确:"+exportOperationsUserVo.getPhoneNumber(), I18nKeyConstant.ACCOUNT_FORMAT_ERROR);
                throw new ServiceException("以下帐号格式不正确:", I18nKeyConstant.ACCOUNT_FORMAT_ERROR,new Object[]{exportOperationsUserVo.getPhoneNumber()});
            }
            xpOperationsUser.setPhoneNumber(exportOperationsUserVo.getPhoneNumber());
            xpOperationsUser.setPassword(SecurityUtils.encryptPassword("a123456"));
@@ -479,4 +479,12 @@
            return vo;
        }).collect(Collectors.toList());
    }
    @Override
    public List<XpOperationsUser> getByPhoneNumber(String phoneNumber) {
        if (StringUtils.isBlank(phoneNumber)) {
            return Collections.emptyList();
        }
        return lambdaQuery().eq(XpOperationsUser::getPhoneNumber, phoneNumber).list();
    }
}
xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsRoleMapper.xml
@@ -27,7 +27,7 @@
        SELECT
            u.*,
            r.id AS roleId,
            r.role_name AS roleName
           GROUP_CONCAT(r.role_name)  AS roleName
        FROM xp_operations_user u
        LEFT JOIN xp_operations_role ur ON u.id = ur.operations_user_id
        LEFT JOIN sys_role r ON ur.role_id = r.id AND r.is_deleted = 0
@@ -43,6 +43,7 @@
                AND r.id = #{roleId}
            </if>
        </where>
        GROUP BY u.id
    </select>
    <select id="selectSysUserRoleByOperationUserId"
            resultType="com.xiaopeng.api.model.account.XpOperationsRole">
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpOperationUserClientFallbackFactory.java
@@ -10,6 +10,7 @@
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Slf4j
@@ -69,6 +70,12 @@
                log.error("根据角色ID列表获取运维人员ID列表失败,原因:{}", cause.getMessage());
                return R.fail("根据角色ID列表获取运维人员ID列表失败:" + cause.getMessage());
            }
            @Override
            public R<List<XpOperationsUser>> getByPhoneNumber(String phoneNumber) {
                log.error("根据手机号模糊查询用户失败,原因:{}", cause.getMessage());
                return R.ok(Collections.emptyList());
            }
        };
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationUserClient.java
@@ -7,6 +7,7 @@
import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -86,4 +87,13 @@
     */
    @PostMapping("/inner/xp-operations-role/getXpOperationsRoleByRoleIds")
    R<List<XpOperationsRole>> getXpOperationsRoleByRoleIds(@RequestBody List<Long> roleIds);
    /**
     * 根据手机号模糊查询用户(内部接口)
     *
     * @param phoneNumber 手机号
     * @return 用户信息列表
     */
    @PostMapping("/inner/xpOperationsUser/getByPhoneNumber")
    public R<List<XpOperationsUser>> getByPhoneNumber(@RequestParam String phoneNumber);
}
xp-robotaxi-automatic-pilot-boot/pom.xml
@@ -143,16 +143,6 @@
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
<!--            <plugin>-->
<!--                <groupId>org.apache.maven.plugins</groupId>-->
<!--                <artifactId>maven-surefire-plugin</artifactId>-->
<!--                <configuration>-->
<!--                    <argLine>-->
<!--                        &#45;&#45;add-opens java.base/java.lang=ALL-UNNAMED-->
<!--                        &#45;&#45;add-opens java.base/java.util=ALL-UNNAMED-->
<!--                    </argLine>-->
<!--                </configuration>-->
<!--            </plugin>-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
@@ -837,7 +837,6 @@
                    //下车完成
                    buildPushOrderStatus(orderId, OrderStatusEnum.APPROVAL_REJECTION, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.APPROVAL_REJECTION.getCode());
                    // 下发巡游任务
                    R<XpOrder> xpOrderR = xpOrderClient.queryOrderById(Long.parseLong(orderId));
                    if(xpOrderR.getCode()==200){
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleRepairController.java
@@ -15,6 +15,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -42,7 +43,7 @@
     */
    @ApiOperation(value = "车辆运维-车辆运维-车辆送修", tags = {"运维APP-车辆管理"})
    @PostMapping("/api/v1/vehicleRepair/saveRepair")
    public R<String> saveRepair(@RequestBody XpVehicleRepairStartDTO dto) {
    public R<String> saveRepair(@Validated @RequestBody XpVehicleRepairStartDTO dto) {
        Long id = tokenService.getLoginOperationUser().getId();
        xpVehicleRepairService.saveRepair(dto,id);
@@ -53,7 +54,7 @@
     */
    @ApiOperation(value = "车辆运维-车辆运维-车辆取回", tags = {"运维APP-车辆管理"})
    @PostMapping("/api/v1/vehicleRepair/saveReturnRepair")
    public R<String> saveReturnRepair(@RequestBody XpVehicleRepairReturnDTO dto) {
    public R<String> saveReturnRepair(@Validated @RequestBody XpVehicleRepairReturnDTO dto) {
        Long id = tokenService.getLoginOperationUser().getId();
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/XpVehicleRepairReturnDTO.java
@@ -3,6 +3,7 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
@@ -13,6 +14,7 @@
    @ApiModelProperty(value = "维修id")
    private Long id;
    @Length(max = 200, message = "维修费用长度不能超过200字")
    @ApiModelProperty(value = "维修费用")
    private Double repairMoney;
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/XpVehicleRepairStartDTO.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
import java.time.LocalDate;
@@ -23,6 +24,7 @@
    @ApiModelProperty(value = "结束时间")
    private LocalDate endTime;
    @Length(max = 600, message = "维修原因长度不能超过600字")
    @ApiModelProperty(value = "维修原因")
    private String repairReason;
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/utils/GDMapGeocodingUtil.java
@@ -254,10 +254,10 @@
        if(routePlanRule!=null){
            params.put("strategy", routePlanRule);
        }
        log.info("高德地图接口:{}", url);
        log.info("高德地图参数:{}", params);
        String post = HttpUtils.post(url, JSON.toJSONString(params));
        System.out.println("高德地图返回结果:"+ post);
//        String forObject = restTemplate.getForObject(url, String.class, params);
        log.info("高德地图返回结果:"+ post);
        JSONObject jsonObject = JSON.parseObject(post);
        String data = jsonObject.getString("data");
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpInvitationCodeController.java
@@ -208,7 +208,7 @@
            if (!StringUtils.hasLength(bindAccount)) {
                errors.add(messageSource.getMessage(I18nKeyConstant.INVITATION_IMPORT_ACCOUNT_EMPTY, new Object[]{rowNum}, I18nKeyConstant.INVITATION_IMPORT_ACCOUNT_EMPTY, LocaleContextHolder.getLocale()));
            } else if (!PhoneUtil.isPhone(bindAccount)) {
            } else if (!PhoneUtil.isMobile(bindAccount)) {
                errors.add(messageSource.getMessage(I18nKeyConstant.INVITATION_IMPORT_ACCOUNT_INVALID, new Object[]{rowNum, bindAccount}, I18nKeyConstant.INVITATION_IMPORT_ACCOUNT_INVALID, LocaleContextHolder.getLocale()));
            }
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java
@@ -227,7 +227,7 @@
    @Override
    public R editWhitelist(XpWhitelist dto, SysUser sysUser) {
        if (!PhoneUtil.isPhone(dto.getAccount())) {
        if (!PhoneUtil.isMobile(dto.getAccount())) {
            throw new ServiceException("以下帐号格式不正确:", I18nKeyConstant.ACCOUNT_FORMAT_ERROR, new Object[]{dto.getAccount()});
        }
        XpWhitelist old = this.lambdaQuery()
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -1476,19 +1476,19 @@
            throw new ServiceException("当前城市未配置定价规则", I18nKeyConstant.ORDER_PRICING_NOT_EXISTS);
        }
        // 费用
//        // 查询订单轨迹
//        List<OrderTrajectory> trajectories = mongoTemplate.find(
//                new Query(Criteria.where("orderId").is(orderId))
//                        .with(Sort.by(Sort.Direction.ASC, "locatetime")),
//                OrderTrajectory.class
//        );
//        List<TaxiPricingDemoService.GpsPoint> gpsPoints = new ArrayList<>();
//        for (OrderTrajectory trajectory : trajectories) {
//            TaxiPricingDemoService.GpsPoint point = new TaxiPricingDemoService.GpsPoint(trajectory.getDistance(), trajectory.getLocatetime());
//            gpsPoints.add(point);
//        }
        // 补充临时轨迹数据
        List<TaxiPricingDemoService.GpsPoint> gpsPoints = TaxiPricingDemoService.createMockGpsPoints(DateUtils.toDate(order.getCreateTime()));
        // 查询订单轨迹
        List<OrderTrajectory> trajectories = mongoTemplate.find(
                new Query(Criteria.where("orderId").is(orderId))
                        .with(Sort.by(Sort.Direction.ASC, "locatetime")),
                OrderTrajectory.class
        );
        List<TaxiPricingDemoService.GpsPoint> gpsPoints = new ArrayList<>();
        for (OrderTrajectory trajectory : trajectories) {
            TaxiPricingDemoService.GpsPoint point = new TaxiPricingDemoService.GpsPoint(trajectory.getDistance(), trajectory.getLocatetime());
            gpsPoints.add(point);
        }
//         补充临时轨迹数据
//        List<TaxiPricingDemoService.GpsPoint> gpsPoints = TaxiPricingDemoService.createMockGpsPoints(DateUtils.toDate(order.getCreateTime()));
        TaxiPricingDemoService.PricingConfig config = new TaxiPricingDemoService.PricingConfig();
@@ -1529,11 +1529,26 @@
                paramNum5 = jsonObject.getDouble("num5");
                break;
            }
        }
        //一口价
        if(pricing.getPricingType() == 2){
            JSONObject basicPricingJson = JSONObject.parseObject(pricing.getBasicPricingJson());
            String num1 = "00:00";
            String num2 = "23:59";
            String num3 = basicPricingJson.getString("num1");
            String num4 = basicPricingJson.getString("num2");
            String num5 = basicPricingJson.getString("num3");
            String num6 = basicPricingJson.getString("num4");
            String num7 = basicPricingJson.getString("num5");
            config.normals.add(new TaxiPricingDemoService.PricingRule("普通时段", num1, num2, Double.parseDouble(num3), Double.parseDouble(num4), Double.parseDouble(num5), Double.parseDouble(num6), Double.parseDouble(num7)));
            paramNum4 = basicPricingJson.getDouble("num2");
            paramNum5 = basicPricingJson.getDouble("num3");
        }
        //动态计费
        if (pricing.getPricingType() == 1) {
            JSONObject basicPricingJson = JSONObject.parseObject(pricing.getBasicPricingJson());
            config.peaks.add(new TaxiPricingDemoService.PricingRule("高峰期", basicPricingJson.getString("num21").split(" - ")[0], basicPricingJson.getString("num21").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num23")),paramNum4, paramNum5,  Double.parseDouble(basicPricingJson.getString("num24")), Double.parseDouble(basicPricingJson.getString("num25"))));
@@ -1551,17 +1566,14 @@
        TaxiPricingDemoService.TaxiPricingService service = new TaxiPricingDemoService.TaxiPricingService();
        Integer holidayToday = holidayUtil.isHolidayToday();
        Map<String, BigDecimal> bill = service.calculateOrderPrice(DateUtils.toDate(order.getBoardingTime()), order.getMileageKilometers(), gpsPoints, config,holidayToday);
        System.err.println("======= 订单计费账单 =======");
        bill.forEach((detail, price) -> System.err.println(detail + ": " + price + " 元"));
        log.info("======= 订单计费账单 =======");
        bill.forEach((detail, price) -> log.info(detail + ": " + price + " 元"));
        BigDecimal totalAmount = bill.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
        System.err.println("--------------------------");
        System.err.println("应付总额: " + totalAmount + " 元");
        log.info("--------------------------");
        log.info("应付总额: " + totalAmount + " 元");
        BigDecimal startMoney = BigDecimal.ZERO;
        // 默认费率1
        double priceRate = 1;
@@ -1789,8 +1801,7 @@
        if (vehicle != null) {
            // 修改车辆状态
            vehicle.setState(0);
            //发送巡游订单
            addCruiseMission(vehicle, order);
//            // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作
//            R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail();
xp-robotaxi-push-message-boot/pom.xml
@@ -108,11 +108,11 @@
                </exclusion>
            </exclusions>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>org.apache.shardingsphere</groupId>-->
<!--            <artifactId>shardingsphere-transaction-base-seata-at</artifactId>-->
<!--            <version>5.2.1</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-transaction-base-seata-at</artifactId>
            <version>5.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java
@@ -313,10 +313,24 @@
    @Override
    public R<PageInfo<FleetPageVO>> pageList(FleetPageQuery query) {
        // 1. 构建查询条件
        List<Long> operationUserIds = Collections.emptyList();
        if (StringUtils.isNotBlank(query.getPhoneNumber())) {
            List<XpOperationsUser> data = xpOperationUserClient.getByPhoneNumber(query.getPhoneNumber()).getData();
            if (CollUtil.isEmpty(data)) {
                PageInfo<FleetPageVO> emptyPageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
                emptyPageInfo.setRecords(new ArrayList<>());
                emptyPageInfo.setTotal(0L);
                return R.ok(emptyPageInfo);
            }
            operationUserIds = data.stream().map(XpOperationsUser::getId).collect(Collectors.toList());
        }
        LambdaQueryWrapper<XpFleet> wrapper = new LambdaQueryWrapper<>();
        if (StringUtils.isNotBlank(query.getFleetName())) {
            wrapper.like(XpFleet::getFleetName, query.getFleetName());
        }
        if (CollUtil.isNotEmpty(operationUserIds)) {
            wrapper.in(XpFleet::getOperationsUserId, operationUserIds);
        }
        wrapper.orderByDesc(XpFleet::getCreateTime);
        // 2. 执行分页查询