liujie
2026-03-12 11cc887ed445bca9360749f7d0e0fcc432cff8ce
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi
1个文件已添加
42个文件已修改
372 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysUserController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysRoleBakServiceImplBak.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysUserServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpClockIn.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/config/SnowflakeConfig.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-gateway-boot/pom.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-gateway-boot/src/main/java/com/xiaopeng/gateway/handler/GatewayExceptionHandler.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleCleanController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleDetectionController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehiclePreparationController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/ClockInScheduleTask.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpPointServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpSystemSettingServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpElectronicFenceController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpInvitationCodeController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpWhitelistController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/SysDictTypeServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpCruisePlanServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpFrequentlyAskedQuestionsServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpRideGuideServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpSystemSettingServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpTradingStrategyServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpPolicyApplicationServiceImpl.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/task/VehicleDocumentExpiryTask.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/resources/i18n/messages_zh_CN.properties 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysUserController.java
@@ -24,6 +24,8 @@
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -282,7 +284,8 @@
    }
    @PostMapping("/updateSysUser")
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R<Boolean> updateSysUser(@RequestBody SysUser sysUser) {
        try {
            sysUser.setUpdateBy(SecurityUtils.getUsername());
@@ -449,7 +452,8 @@
     */
    @ResponseBody
    @PostMapping("/addSysUser")
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R<Long> addSysUser(@RequestBody SysUser user) {
//        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
//            throw new RuntimeException("手机号已开通账号");
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java
@@ -28,6 +28,8 @@
import com.xiaopeng.common.security.utils.SecurityUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -61,7 +63,8 @@
     * @param dto 新增权限组请求
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void addGroup(SysGroupAddDTO dto) {
        // 校验组名唯一性
        if (!checkGroupNameUnique(dto.getGroupName(), null)) {
@@ -83,7 +86,8 @@
     * @param dto 编辑权限组请求
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void editGroup(SysGroupEditDTO dto) {
        // 校验权限组是否存在
        SysGroup existGroup = this.getById(dto.getId());
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysRoleBakServiceImplBak.java
@@ -14,6 +14,8 @@
import com.xiaopeng.account.mapper.SysUserRoleMapper;
import com.xiaopeng.account.service.ISysRoleBakService;
import com.xiaopeng.api.model.account.*;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -205,7 +207,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int insertRole(SysRoleBak role) {
        // 新增角色信息
        roleMapper.insertRole(role);
@@ -219,7 +222,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int updateRole(SysRoleBak role) {
        // 修改角色信息
//        roleMapper.updateRole(role);
@@ -246,7 +250,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int authDataScope(SysRoleBak role) {
        // 修改角色信息
        roleMapper.updateRole(role);
@@ -320,7 +325,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int deleteRoleById(Long roleId) {
        // 删除角色与菜单关联
        roleMenuMapper.deleteRoleMenuByRoleId(roleId);
@@ -336,7 +342,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int deleteRoleByIds(Long[] roleIds) {
        for (Long roleId : roleIds) {
            checkRoleAllowed(new SysRoleBak(roleId));
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysUserServiceImpl.java
@@ -14,6 +14,8 @@
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.security.service.TokenService;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@@ -157,7 +159,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int insertUser(SysUser user) {
        // 新增用户信息
//        int rows = userMapper.insertUser(user);
@@ -177,7 +180,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int updateUser(SysUser user) {
        return userMapper.updateUser(user);
    }
@@ -189,7 +193,8 @@
     * @param roleIds 角色组
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void insertUserAuth(Long userId, Long[] roleIds) {
        userRoleMapper.deleteUserRoleByUserId(userId);
        insertUserRole(userId, roleIds);
@@ -244,7 +249,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int deleteUserByIds(Long[] userIds) {
        for (Long userId : userIds) {
            SysUser sysUser = new SysUser();
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java
@@ -49,8 +49,8 @@
        return pageInfo;
    }
    @Override
//    @Transactional(rollbackFor = Exception.class)
//    @ShardingSphereTransactionType(TransactionType.BASE)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void addNotificationBatch(List<XpOperationsUserNotification> notifications) {
        saveBatch(notifications);
    }
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
@@ -34,6 +34,8 @@
import com.xiaopeng.common.security.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -178,8 +180,10 @@
        return vo;
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void saveCertificate(XpOperationsUserDTO dto) {
        XpOperationsUser xpOperationsUser = BeanUtil.copyProperties(dto, XpOperationsUser.class);
        updateById(xpOperationsUser);
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpClockIn.java
@@ -43,7 +43,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime clockInTime;
    @ApiModelProperty(value = "上班打卡日期")
    @ApiModelProperty(value = "下班打卡日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime clockOutTime;
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/config/SnowflakeConfig.java
@@ -23,7 +23,7 @@
    @Value("${snowflake.data-center-id:0}")
    private long dataCenterId;
    @Bean
    @Bean("hutoolSnowflake")
    public Snowflake snowflake() {
        long resolvedWorkerId = resolveWorkerId();
        return new Snowflake(EPOCH_DATE, resolvedWorkerId, dataCenterId, false);
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -30,6 +30,7 @@
import com.xiaopeng.common.redis.service.RedisService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
@@ -58,7 +59,7 @@
    private RedisService redisService;
    @Resource
    private XpVehicleClient xpVehicleClient;
    @Resource
    @Resource(name = "hutoolSnowflake")
    private Snowflake snowflake;
    @PostMapping("/inner/pushOrder")
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
@@ -45,6 +45,7 @@
import com.xiaopeng.common.core.utils.uuid.UUID;
import com.xiaopeng.common.redis.service.RedisService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.MongoTemplate;
@@ -104,7 +105,7 @@
    @Resource
    private XpCruisePlanClient xpCruisePlanClient;
    @Resource
    @Resource(name = "hutoolSnowflake")
    private Snowflake snowflake;
    @Value("${robotaxi.appId:xp_robotaxi_api}")
xp-robotaxi-gateway-boot/pom.xml
@@ -38,31 +38,15 @@
        </dependency>
        <!-- SpringCloud Alibaba Nacos -->
        <!--<dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>-->
        </dependency>
        <!-- SpringCloud Alibaba Nacos Config -->
        <!--<dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>-->
        <dependency>
            <groupId>com.xiaopeng.logan</groupId>
            <artifactId>logan2-namor-client</artifactId>
            <version>1.16.0</version>
        </dependency>
        <dependency>
            <groupId>com.xiaopeng.logan</groupId>
            <artifactId>logan-starter-core</artifactId>
            <version>2.3.5</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- SpringCloud Alibaba Sentinel -->
@@ -165,15 +149,11 @@
    </dependencies>
    <build>
        <!--<finalName>${project.artifactId}</finalName>-->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier>
                    <executable>true</executable>
                </configuration>
                <executions>
                    <execution>
                        <goals>
xp-robotaxi-gateway-boot/src/main/java/com/xiaopeng/gateway/handler/GatewayExceptionHandler.java
@@ -33,12 +33,12 @@
        String msg;
        if (ex instanceof NotFoundException) {
            msg = "服务未找到";
            msg = "系统繁忙,请稍后重试";
        } else if (ex instanceof ResponseStatusException) {
            ResponseStatusException responseStatusException = (ResponseStatusException) ex;
            msg = responseStatusException.getMessage();
        } else {
            msg = "内部服务器错误";
            msg = "系统繁忙,请稍后重试";
        }
        log.error("[网关异常处理]请求路径:{},异常信息:{}", exchange.getRequest().getPath(), ex.getMessage());
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -26,6 +26,8 @@
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
@@ -78,7 +80,6 @@
    @ApiOperation(value = "事故任务确认到达", tags = "运维APP-任务中心")
    @GetMapping("/api/v1/task/confirmArrive")
    @Transactional
    public R confirmArrive(Long id) {
        Long userId = tokenService.getLoginOperationUser().getXpOperationsUser().getId();
        return xpTaskService.confirmArrive(id, userId);
@@ -182,9 +183,10 @@
        return xpTaskService.cleanDetail(id);
    }
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    @ApiOperation(value = "处理车辆事故", tags = "运维APP-任务中心")
    @PostMapping("/api/v1/task/handleVehicleAccident")
    @Transactional
    public R handleVehicleAccident(@RequestBody HandleVehicleAccidentDto dto) {
        LoginOperationUser loginOperationUser = tokenService.getLoginOperationUser();
        XpOperationsUser xpOperationsUser = loginOperationUser.getXpOperationsUser();
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleCleanController.java
@@ -17,6 +17,8 @@
import com.xiaopeng.maintenance.service.XpTaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@@ -55,7 +57,8 @@
    /**
     * 车辆运维-车辆运维-车身清洁
     */
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    @ApiOperation(value = "车辆运维-车辆运维-车身清洁", tags = {"运维APP-车辆管理"})
    @PostMapping("/api/v1/vehicleClean/add")
    public R<String> add(@RequestBody XpVehicleCleanDTO dto) {
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleDetectionController.java
@@ -15,6 +15,8 @@
import com.xiaopeng.maintenance.service.XpTaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -72,7 +74,8 @@
    /**
     * 车辆详情-车辆运维-车辆检测提交
     */
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    @ApiOperation(value = "车辆运维-车辆运维-车辆检测提交", tags = {"运维APP-车辆管理"})
    @PostMapping("/api/v1/vehicleDetection/saveDetection")
    public R<String> saveDetection(@RequestBody XpVehicleDetectionDTO dto) {
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java
@@ -88,8 +88,6 @@
                    return R.fail(longR.getMsg());
                }
            }
        }else if(dto.getDepartureStatus()==3){
            // 收车 关闭当前巡游单子 生成新的返程单子  找到收车站点
            R<Long> r = xpCruiseOrderClient.updateCruiseOrder(xpVehicle.getVehicleVin());
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehiclePreparationController.java
@@ -14,6 +14,8 @@
import com.xiaopeng.maintenance.service.XpTaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -46,7 +48,8 @@
    /**
     * 车辆详情-车辆运维-车辆整备
     */
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    @ApiOperation(value = "车辆运维-车辆运维-车辆整备", tags = {"运维APP-车辆管理"})
    @PostMapping("/api/v1/vehiclePreparation/savePreparation")
    public R<String> savePreparation(@RequestBody XpVehiclePreparationDTO dto) {
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/ClockInScheduleTask.java
New file
@@ -0,0 +1,70 @@
package com.xiaopeng.maintenance.schedule;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.maintenance.XpClockIn;
import com.xiaopeng.api.model.maintenance.XpSchedulingDetail;
import com.xiaopeng.maintenance.mapper.XpClockInMapper;
import com.xiaopeng.maintenance.mapper.XpTaskMapper;
import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper;
import com.xiaopeng.maintenance.mapper.XpTaskRuleRoleMapper;
import com.xiaopeng.maintenance.service.IXpClockInService;
import com.xiaopeng.maintenance.service.IXpSchedulingDetailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 打卡定时任务
 * <p>
 * 判断是否迟到或者缺卡
 * </p>
 *
 * @author xiaochen
 * @since 2026-02-27
 */
@Component
public class ClockInScheduleTask {
    private static final Logger log = LoggerFactory.getLogger(ClockInScheduleTask.class);
    @Autowired
    private IXpClockInService xpClockInService;
    @Autowired
    private IXpSchedulingDetailService xpSchedulingDetailService;
    /**
     * 每5分钟执行一次
     */
    @Scheduled(cron = "0 */5 * * * ?")
    public void clockInScheduleTask() {
        log.info("========== 开始执行打卡检查 ==========");
        try {
            // 查询上班卡在今天的
            List<XpSchedulingDetail> clockInPlanList = xpSchedulingDetailService.list(Wrappers.lambdaQuery(XpSchedulingDetail.class)
                    .likeRight(XpSchedulingDetail::getPlanTime, LocalDate.now()));
            if(!CollectionUtils.isEmpty(clockInPlanList)){
                List<Long> fleetIds = clockInPlanList.stream().map(XpSchedulingDetail::getFleetId).collect(Collectors.toList());
                // 查询所有车队
            }
            // 查询下班卡在今天的
            List<XpSchedulingDetail> clockOutPlanList = xpSchedulingDetailService.list(Wrappers.lambdaQuery(XpSchedulingDetail.class)
                    .likeRight(XpSchedulingDetail::getPlanTime, LocalDate.now()));
        } catch (Exception e) {
            log.error("执行打卡检查任务执行失败", e);
        }
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -49,6 +49,8 @@
import com.xiaopeng.maintenance.utils.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
@@ -185,8 +187,11 @@
        return pageInfo;
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void saveVehicleAccident(SaveVehicleAccidentDto dto, XpOperationsUser xpOperationsUser) {
        XpTask xpTask = new XpTask();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
@@ -797,6 +802,8 @@
    }
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R confirmArrive(Long id, Long userId) {
        RLock lock = redissonClient.getLock("TASK_CONFIRM_" + id);
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java
@@ -96,8 +96,6 @@
     */
    @PostMapping("/add")
    @ApiOperation(value = "新增电子围栏")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R add(@Validated @RequestBody ElectronicFenceAddDto dto) {
        return xpElectronicFenceService.addElectronic(dto);
    }
@@ -110,8 +108,6 @@
    @PostMapping("/updateStatus")
    @ResponseBody
    @ApiOperation(value = "修改状态")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R updateStatus(@RequestBody ElectronicFenceAreaUpdateStatusDto dto) {
        XpElectronicFenceArea electronicFenceArea = xpElectronicFenceAreaService.getById(dto.getId());
        if (electronicFenceArea == null) {
@@ -150,8 +146,6 @@
     */
    @PostMapping("/edit")
    @ApiOperation(value = "编辑电子围栏")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R edit(@Validated @RequestBody ElectronicFenceUpdateDto dto) {
        return xpElectronicFenceService.editElectronic(dto);
    }
@@ -161,8 +155,8 @@
     */
    @PostMapping("/copy")
    @ApiOperation(value = "复制电子围栏")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R<Long> copy(@RequestParam("id") Integer id) {
        XpElectronicFence electronicFence = xpElectronicFenceService.getById(id);
        if (electronicFence.getStatus()==2){
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java
@@ -25,7 +25,10 @@
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.BeanUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -148,8 +151,6 @@
    @PostMapping("/add")
    @ResponseBody
    @ApiOperation(value = "新增点位")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R<XpPoint> add(@Validated @RequestBody PointAddDto pointAddDto) {
        return R.ok(xpPointService.addPointWithGeneratedNumber(pointAddDto));
    }
@@ -160,8 +161,6 @@
    @GetMapping("/deletePoint")
    @ResponseBody
    @ApiOperation(value = "删除点位")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R deletePoint(@RequestParam("ids") String ids) {
        xpPointService.removeBatchByIds(Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList()));
        return R.ok();
@@ -172,8 +171,8 @@
     */
    @PostMapping("/edit")
    @ApiOperation(value = "编辑点位")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R edit(@Validated @RequestBody PointUpdateDto pointAddDto) {
        XpPoint xpPoint = xpPointService.getById(pointAddDto.getId());
        if (!xpPoint.getElectronicAreaId().equals(pointAddDto.getElectronicAreaId())) {
@@ -203,8 +202,6 @@
     */
    @PostMapping("/enableDisable")
    @ApiOperation(value = "启用/禁用")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R enableDisable(@RequestBody XpPointEnableDisableDto dto) {
        XpPoint xpPoint = xpPointService.getById(dto.getId());
        xpPoint.setOperationStatus(dto.getOperationStatus());
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
@@ -31,6 +31,8 @@
import com.xiaopeng.map.utils.PolygonOverlapService;
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.pinyin4j.PinyinHelper;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LinearRing;
@@ -42,6 +44,7 @@
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.awt.geom.Point2D;
@@ -195,6 +198,8 @@
        return pinyinInitials.toString();
    }
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R addElectronic(ElectronicFenceAddDto dto) {
        // 获取现有的运营区域(areaType=1)
        LambdaQueryWrapper<XpElectronicFenceArea> xpElectronicFenceAreaLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -383,6 +388,8 @@
    }
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R editElectronic(ElectronicFenceUpdateDto dto) {
            // 获取现有的运营区域(areaType=1),排除当前正在编辑的电子围栏
            LambdaQueryWrapper<XpElectronicFenceArea> xpElectronicFenceAreaLambdaQueryWrapper = new LambdaQueryWrapper<>();
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpPointServiceImpl.java
@@ -39,11 +39,14 @@
import com.xiaopeng.map.vo.OrderDistanceVo;
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.pinyin4j.PinyinHelper;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalTime;
@@ -88,6 +91,8 @@
    private RedissonClient redissonClient;
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public XpPoint addPointWithGeneratedNumber(PointAddDto pointAddDto) {
        if (pointAddDto == null) {
            throw new ServiceException("参数不能为空", I18nKeyConstant.SYSTEM_EXCEPTION);
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpSystemSettingServiceImpl.java
@@ -46,7 +46,7 @@
        return 15;
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void saveSystemSetting(XpSystemSetting xpSystemSetting) {
        saveOrUpdate(xpSystemSetting);
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpElectronicFenceController.java
@@ -84,8 +84,6 @@
     */
    @PostMapping("/add")
    @ApiOperation(value = "新增电子围栏")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R add(@Validated @RequestBody ElectronicFenceAddDto dto) {
        return xpElectronicFenceService.addElectronic(dto);
    }
@@ -98,8 +96,6 @@
    @PostMapping("/updateStatus")
    @ResponseBody
    @ApiOperation(value = "修改状态")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R updateStatus(@RequestBody ElectronicFenceAreaUpdateStatusDto dto) {
        XpElectronicFenceArea electronicFenceArea = xpElectronicFenceAreaService.getById(dto.getId());
        if (electronicFenceArea == null) {
@@ -138,8 +134,6 @@
     */
    @PostMapping("/edit1")
    @ApiOperation(value = "编辑电子围栏")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R edit(@Validated @RequestBody ElectronicFenceUpdateDto dto) {
        return xpElectronicFenceService.editElectronic(dto);
    }
@@ -149,8 +143,8 @@
     */
    @PostMapping("/copy")
    @ApiOperation(value = "复制电子围栏")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R<Long> copy(@RequestParam("id") Integer id) {
        XpElectronicFence electronicFence = xpElectronicFenceService.getById(id);
        if (electronicFence.getStatus()==2){
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpInvitationCodeController.java
@@ -27,6 +27,8 @@
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.transaction.annotation.Transactional;
@@ -82,7 +84,6 @@
    @PostMapping("/api/v1/invitation/add")
    @ResponseBody
    @ApiOperation(value = "生成邀请码")
    @Transactional
    public R add(@RequestBody InvitationAddDto dto){
        long existing = xpInvitationCodeService.count();
        long incoming = Arrays.stream(Optional.ofNullable(dto.getPhones()).orElse("").split(","))
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java
@@ -84,12 +84,9 @@
    /**
     * 新增点位
     */
    @Transactional(rollbackFor = Exception.class)
    @PostMapping("/addPoint")
    @ResponseBody
    @ApiOperation(value = "新增点位")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R add(@Validated  @RequestBody PointAddDto pointAddDto) {
        XpPoint xpPoint = new XpPoint();
        BeanUtils.copyProperties(pointAddDto, xpPoint);
@@ -102,8 +99,6 @@
    @GetMapping("/deletePoint")
    @ResponseBody
    @ApiOperation(value = "删除点位")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R deletePoint(@RequestParam("ids") String ids) {
        xpPointService.removeBatchByIds(Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList()));
        return R.ok();
@@ -113,8 +108,6 @@
     */
    @PostMapping("/editPoint")
    @ApiOperation(value = "编辑点位")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R edit(@Validated@RequestBody PointUpdateDto pointAddDto) {
        XpPoint xpPoint = new XpPoint();
        BeanUtils.copyProperties(pointAddDto, xpPoint);
@@ -134,8 +127,6 @@
     */
    @PostMapping("/enableDisablePoint")
    @ApiOperation(value = "启用/禁用")
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public R enableDisable(@RequestBody XpPointEnableDisableDto dto) {
        XpPoint xpPoint = xpPointService.getById(dto.getId());
        xpPoint.setOperationStatus(dto.getOperationStatus());
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpWhitelistController.java
@@ -32,6 +32,8 @@
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -104,7 +106,6 @@
    @PostMapping("/api/v1/whitelist/add")
    @ResponseBody
    @ApiOperation(value = "新增白名单")
    @Transactional
    public R add(@Validated @RequestBody WhitelistAddDto dto) {
        if (!StringUtils.hasLength(dto.getAccount())) {
            return R.fail("请输入账号");
@@ -198,9 +199,12 @@
        }
    }
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    @Log(title = "白名单导入", businessType = BusinessType.IMPORT)
    @ApiOperation(value = "白名单导入")
    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
    @PostMapping("/base/v1/whitelist/importExcel")
    public AjaxResult<String> importExcel(@RequestParam("file") MultipartFile file) {
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/SysDictTypeServiceImpl.java
@@ -10,6 +10,8 @@
import com.xiaopeng.operation.mapper.SysDictDataMapper;
import com.xiaopeng.operation.mapper.SysDictTypeMapper;
import com.xiaopeng.operation.service.ISysDictTypeService;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -190,7 +192,8 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public int updateDictType(SysDictType dict)
    {
        SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId());
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpCruisePlanServiceImpl.java
@@ -28,6 +28,8 @@
import com.xiaopeng.operation.vo.XpCruisePlanVehicleVO;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -77,7 +79,8 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void add(XpCruisePlanAddDTO dto) {
        //1.校验巡游计划名称
        validatePlanName(dto.getPlanName(), null);
@@ -105,7 +108,8 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void edit(XpCruisePlanEditDTO dto) {
        if (dto.getId() == null) {
            throw new ServiceException("巡游计划ID不能为空", I18nKeyConstant.CRUISE_PLAN_ID_EMPTY);
@@ -142,7 +146,8 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void deleteById(Long id) {
        xpCruisePlanPointService.lambdaUpdate()
                .eq(XpCruisePlanPoint::getCruisePlanId, id)
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
@@ -33,6 +33,8 @@
import com.xiaopeng.operation.utils.PolygonOverlapService;
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.pinyin4j.PinyinHelper;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.MongoTemplate;
@@ -40,6 +42,7 @@
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
@@ -114,7 +117,11 @@
        }
        return pinyinInitials.toString();
    }
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R addElectronic(ElectronicFenceAddDto dto) {
        try {
            // 获取现有的运营区域(areaType=1)
@@ -296,6 +303,8 @@
    }
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R editElectronic(ElectronicFenceUpdateDto dto) {
        try {
            // 获取现有的运营区域(areaType=1),排除当前正在编辑的电子围栏
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpFrequentlyAskedQuestionsServiceImpl.java
@@ -5,6 +5,8 @@
import com.xiaopeng.operation.mapper.XpFrequentlyAskedQuestionsMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.operation.service.IXpFrequentlyAskedQuestionsService;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -20,8 +22,9 @@
 */
@Service
public class XpFrequentlyAskedQuestionsServiceImpl extends ServiceImpl<XpFrequentlyAskedQuestionsMapper, XpFrequentlyAskedQuestions> implements IXpFrequentlyAskedQuestionsService {
    @Transactional(rollbackFor = Exception.class)
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void saveQuestion(XpFrequentlyAskedQuestionsDTO dto) {
        //先删除原有的常见问题
        remove(null);
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpRideGuideServiceImpl.java
@@ -9,6 +9,8 @@
import com.xiaopeng.operation.service.XpRideGuideService;
import com.xiaopeng.operation.vo.XpRideGuideNextVo;
import com.xiaopeng.operation.vo.XpRideGuideVo;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -53,8 +55,9 @@
     * 保存乘车指南
     * @param dto
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void saveGuide(XpRideGuideDTO dto) {
        //根据类型删除已配置的乘车指南
        lambdaUpdate().remove();
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpSystemSettingServiceImpl.java
@@ -54,7 +54,7 @@
        return 15;
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void saveSystemSetting(XpSystemSetting xpSystemSetting) {
        if (Objects.nonNull(xpSystemSetting.getId())) {
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpTradingStrategyServiceImpl.java
@@ -12,6 +12,8 @@
import com.xiaopeng.operation.service.IXpTradingStrategyService;
import com.xiaopeng.operation.vo.XpTradingStrategyDetailVO;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -58,7 +60,8 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void editStrategy(XpTradingStrategyEditDTO dto) {
        // 1. 校验策略是否存在
        XpTradingStrategy strategy = this.getById(dto.getId());
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java
@@ -16,8 +16,11 @@
import com.xiaopeng.operation.query.WhitelistPageListQuery;
import com.xiaopeng.operation.service.IXpWhitelistService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
@@ -59,6 +62,8 @@
    }
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R addWhitelist(WhitelistAddDto dto, SysUser sysUser) {
        List<String> accounts = Arrays.stream(dto.getAccount().split(","))
                .map(String::trim)
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java
@@ -64,7 +64,7 @@
            pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER);
            R<Boolean> booleanR = orderMissionClient.cancelOrder(pushOrderDto);
            if(booleanR==null || !booleanR.getData()){
                log.error("XPU取消巡游订单失败");
                log.info("XPU取消巡游订单失败");
                return null;
            }
            return xpCruiseOrder.getId();
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -93,6 +93,8 @@
import com.xiaopeng.order.vo.OrderDetailVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -491,8 +493,10 @@
        return new HashMap<>();
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void cancelOrCloseOrder(Long orderId, Integer type) {
        // 1. 校验订单是否存在
        XpOrder order = this.getById(orderId);
@@ -686,8 +690,9 @@
    /**
     * 改派订单
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void reassignOrder(Long orderId, Long newVehicleId, String reassignReason) {
        // 1. 校验订单是否存在
        XpOrder order = this.getById(orderId);
@@ -1114,6 +1119,7 @@
     */
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void cancelOrder(Long orderId, String uid) {
        XpOrder order = this.getById(orderId);
        if (order.getStatus() == 0) {
@@ -1227,6 +1233,7 @@
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void cancelOrder(String orderId) {
        XpOrder order = this.getById(orderId);
        if (order == null) {
@@ -1287,6 +1294,7 @@
     */
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void comment(XpOrderCommentDto dto, String uid) {
        XpOrder xpOrder = this.getById(dto.getOrderId());
        if (xpOrder == null) {
@@ -2347,8 +2355,8 @@
     * @param dto
     */
    @Override
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void popOrder(PopOrderDto dto) {
        String orderType = dto.getOrderType();
        Long orderId = dto.getOrderId();
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java
@@ -38,6 +38,8 @@
import com.xiaopeng.vehicleConvoy.service.IXpFleetVehicleService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -80,7 +82,8 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public R<Void> add(FleetAddDTO dto) {
        // 1. 校验车队名称不能重复
        long count = this.count(new LambdaQueryWrapper<XpFleet>()
@@ -136,7 +139,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R<Void> edit(FleetEditDTO dto) {
        // 1. 查询车队是否存在
        XpFleet fleet = this.getById(dto.getId());
@@ -533,7 +535,8 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void deleteById(Long id) {
        long vehicleCount = xpFleetVehicleService.count(new LambdaQueryWrapper<XpFleetVehicle>()
                .eq(XpFleetVehicle::getFleetId, id));
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpPolicyApplicationServiceImpl.java
@@ -207,7 +207,6 @@
        return new HashMap<>();
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void batchAudit(XpPolicyApplicationAuditDTO dto) {
        // 1.查询待审核的保单申请记录
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -50,6 +50,8 @@
import com.xiaopeng.vehicleConvoy.util.VehicleControlUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.data.geo.Point;
@@ -196,13 +198,6 @@
        }
        for (XpVehicleVO xpVehicleVO : list) {
//            List<Point> positionList = redisTemplate.opsForGeo().position("vehiclePosition:" + xpVehicleVO.getVehicleVin(), xpVehicleVO.getVehicleVin());
//            if (!CollectionUtils.isEmpty(positionList)) {
//                Point geoJsonPoint = positionList.get(0);
//                // 获取经纬度
//                xpVehicleVO.setLongitude(geoJsonPoint.getX());
//                xpVehicleVO.setLatitude(geoJsonPoint.getY());
//            }
            // 查询车辆的续航里程
            VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicleVO.getVehicleVin())), VehiclePosition.class);
            if (Objects.nonNull(vehiclePosition)) {
@@ -216,6 +211,8 @@
            } else {
                xpVehicleVO.setMileageRange(0F);
                xpVehicleVO.setCurrentElectricity(0);
                xpVehicleVO.setLongitude(0D);
                xpVehicleVO.setLatitude(0D);
            }
        }
@@ -261,13 +258,13 @@
                if (null != distance) {
                    Double distance1 = distance.get("WGS84");
                    if (distance1 > 4) {
                        throw new ServiceException("距离过远,无法打开", I18nKeyConstant.VEHICLE_DISTANCE_TOO_LONG);
                        throw new ServiceException("距离过远,无法打开", I18nKeyConstant.VEHICLE_DISTANCE_TOO_LONG);
                    }
                }else {
                    throw new ServiceException("距离过远,无法打开", I18nKeyConstant.VEHICLE_DISTANCE_TOO_LONG);
                    throw new ServiceException("距离过远,无法打开", I18nKeyConstant.VEHICLE_DISTANCE_TOO_LONG);
                }
            }else {
                throw new ServiceException("距离过远,无法打开", I18nKeyConstant.VEHICLE_DISTANCE_TOO_LONG);
                throw new ServiceException("距离过远,无法打开", I18nKeyConstant.VEHICLE_DISTANCE_TOO_LONG);
            }
        }
        // 车门解锁、后备箱解锁
@@ -355,7 +352,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addVehicle(VehicleAddDTO dto) {
        String normalizedVehicleCode = trimToNull(dto.getVehicleCode());
        String normalizedVin = normalizeVin(dto.getVehicleVin());
@@ -387,7 +383,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void editVehicle(VehicleEditDTO dto) {
        String normalizedVehicleCode = trimToNull(dto.getVehicleCode());
        String normalizedVin = normalizeVin(dto.getVehicleVin());
@@ -480,7 +475,8 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void improveInfo(VehicleImproveInfoDTO dto) {
        // 校验已填写的时间字段是否在有效范围内
        validateTimeFields(dto);
@@ -662,7 +658,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchOperation(String idStr) {
        if (StringUtils.isBlank(idStr)) {
            return;
@@ -755,7 +750,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchStock(String idStr) {
        if (StringUtils.isBlank(idStr)) {
            return;
@@ -769,7 +763,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchSetElectronic(List<Long> ids, Long electronicId) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
@@ -840,7 +833,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void importVehicles(List<XpVehicleImportExcel> importList) {
        if (CollectionUtils.isEmpty(importList)) {
            return;
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/task/VehicleDocumentExpiryTask.java
@@ -27,7 +27,6 @@
    private final IXpVehicleService xpVehicleService;
    @Scheduled(cron = "0 0 1 * * ?", zone = "GMT+8")
    @Transactional(rollbackFor = Exception.class)
    public void checkAndStockExpiredVehicles() {
        LocalDate today = LocalDate.now(ZONE_GMT8);
        LocalDateTime todayStart = today.atStartOfDay();
xp-robotaxi-vehicle-convoy-boot/src/main/resources/i18n/messages_zh_CN.properties
@@ -45,4 +45,4 @@
vehicle.import.code.exists=第{0}行车辆编码已存在:{1}
vehicle.import.vin.exists=第{0}行车辆VIN码已存在:{1}
vehicle.import.plate.exists=第{0}行车牌号已存在:{1}
vehicle.distance.too.long=距离过远,无法打开
vehicle.distance.too.long=距离过远,无法打开