xuhy
2026-03-12 9cc3a1b20c897fba88d36356200a77e87e0ee943
Merge remote-tracking branch 'origin/master'
39个文件已修改
380 ■■■■■ 已修改文件
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/vo/order/XpHistoryEndPointsVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/XpHistoryStartPointsVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-gateway-boot/pom.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | 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/XpVehiclePreparationController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | 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-map-boot/src/main/java/com/xiaopeng/map/utils/GDMapGeocodingUtil.java 3 ●●●●● 补丁 | 查看 | 原始文档 | 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/XpPointServiceImpl.java 4 ●●●●● 补丁 | 查看 | 原始文档 | 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/XpOrderServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | 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 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/task/VehicleDocumentExpiryTask.java 1 ●●●●● 补丁 | 查看 | 原始文档 | 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/vo/order/XpHistoryEndPointsVo.java
@@ -30,6 +30,9 @@
    private Integer time;
    @ApiModelProperty("operation_status 运营状态 1=待启用 2=启用中 3=已停用 4=已失效")
    private Integer operationStatus;
    private Long electronicAreaId;
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/XpHistoryStartPointsVo.java
@@ -30,6 +30,9 @@
    private Integer time;
    @ApiModelProperty("operation_status 运营状态 1=待启用 2=启用中 3=已停用 4=已失效")
    private Integer operationStatus;
    private Long electronicAreaId;
    private Integer num;
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
@@ -14,10 +14,7 @@
import com.xiaopeng.api.dto.order.PopOrderDto;
import com.xiaopeng.api.dto.pushMessage.PushOrderRouteDTO;
import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
import com.xiaopeng.api.feignClient.account.XpOperationUserNotificationClient;
import com.xiaopeng.api.feignClient.maintenance.XpTaskClient;
import com.xiaopeng.api.feignClient.maintenance.XpTaskRuleClient;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.operation.ReassignOrderClient;
import com.xiaopeng.api.feignClient.operation.XpCruisePlanClient;
@@ -25,8 +22,6 @@
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.order.XpCruiseOrder;
import com.xiaopeng.api.model.order.XpOrder;
@@ -45,7 +40,6 @@
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;
@@ -60,7 +54,6 @@
import java.util.*;
import java.util.concurrent.TimeUnit;
;
/**
 * Kafka 消费者服务
@@ -105,7 +98,7 @@
    @Resource
    private XpCruisePlanClient xpCruisePlanClient;
    @Resource(name = "hutoolSnowflake")
    @Resource
    private Snowflake snowflake;
    @Value("${robotaxi.appId:xp_robotaxi_api}")
@@ -114,7 +107,7 @@
    @Resource
    private XpTaskClient xpTaskClient;
    private static final com.google.protobuf.util.JsonFormat.Printer jsonPrinter = com.google.protobuf.util.JsonFormat.printer()
    private static final JsonFormat.Printer jsonPrinter = JsonFormat.printer()
            .printingEnumsAsInts()
            .preservingProtoFieldNames();
@@ -268,7 +261,7 @@
                        String vin = jsonObject.getString("vin");
                        String orderType = jsonObject.getString("orderType");
                        PopOrderDto dto = new PopOrderDto();
                        dto.setOrderId(Long.valueOf(orderId));
                        dto.setOrderId(Long.valueOf(orderId.contains("XU") ? orderId.substring(2) : orderId));
                        dto.setXpVehicleVin(vin);
                        dto.setOrderType(orderType);
                        xpOrderClient.popOrder(dto);
@@ -368,12 +361,13 @@
                //TODO 这两个字段现在拿不到
//            dto.setDuration(rtTripInfo.getRemaining_time());
//            dto.setDistance(rtTripInfo.getRemaining_distance().intValue());
//            dto.setDirection();
                xpPushMessageClient.pushOrderRoute(dto);
            }
        }
    }
    /**
@@ -510,7 +504,7 @@
            destination.setLatitude(xpCruiseOrder.getEndLat());
            OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
            dto.setOrderId(Long.parseLong(orderId));
            dto.setOrderId(Long.parseLong(orderId.substring(2)));
            dto.setOrigin(origin);
            dto.setDestination(destination);
            dto.setRouteType(3);
@@ -618,7 +612,7 @@
                destination.setLatitude(xpCruiseOrder.getEndLat());
                OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
                dto.setOrderId(Long.parseLong(orderId));
                dto.setOrderId(Long.parseLong(orderId.substring(2)));
                dto.setOrigin(origin);
                dto.setDestination(destination);
                dto.setRouteType(3);
@@ -800,7 +794,7 @@
                case ORDER_RECEIVED:
                    //收到订单
                    buildPushOrderStatus(orderId, OrderStatusEnum.READY_DEPART, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.READY_DEPART.getCode());
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.READY_DEPART.getCode());
                    break;
                case ORDER_STARTED:
                    //开始执行订单
@@ -809,7 +803,7 @@
                case ORDER_EN_ROUTE_TO_PICKUP:
                    //前往上车点
                    buildPushOrderStatus(orderId, OrderStatusEnum.PICK_UP, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PICK_UP.getCode());
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.PICK_UP.getCode());
                    break;
                case ORDER_ARRIVED_AT_PICKUP:
                    //到达上车点
@@ -818,17 +812,17 @@
                case ORDER_WAITING_FOR_PICKUP:
                    //等待乘客上车
                    buildPushOrderStatus(orderId, OrderStatusEnum.PICK_UP_GUESTS, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PICK_UP_GUESTS.getCode());
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.PICK_UP_GUESTS.getCode());
                    break;
                case ORDER_PASSENGER_ONBOARD:
                    //乘客已上车
                    buildPushOrderStatus(orderId, OrderStatusEnum.PASSENGER_BOARDED, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PASSENGER_BOARDED.getCode());
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.PASSENGER_BOARDED.getCode());
                    break;
                case ORDER_EN_ROUTE_TO_DESTINATION:
                    //前往目的地
                    buildPushOrderStatus(orderId, OrderStatusEnum.IN_SERVICE, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.IN_SERVICE.getCode());
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.IN_SERVICE.getCode());
                    break;
                case ORDER_ARRIVED_AT_DESTINATION:
                    //到达目的地
@@ -837,13 +831,12 @@
                case ORDER_WAITING_FOR_DROPOFF:
                    //等待乘客下车
                    buildPushOrderStatus(orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
                    break;
                case ORDER_DROPOFF_COMPLETED:
                    //下车完成
                    buildPushOrderStatus(orderId, OrderStatusEnum.APPROVAL_REJECTION, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.APPROVAL_REJECTION.getCode());
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.APPROVAL_REJECTION.getCode());
                    // 下发巡游任务
                    R<XpOrder> xpOrderR = xpOrderClient.queryOrderById(Long.parseLong(orderId));
@@ -860,9 +853,6 @@
                            xpCruiseOrderClient.addCruiseMission(addCruiseMissionDto);
                        }
                    }
                    break;
                case ORDER_COMPLETED:
                    //已完成
@@ -871,7 +861,7 @@
                case ORDER_CANCELLED:
                    //已取消
                    buildPushOrderStatus(orderId, OrderStatusEnum.CANCELED, sequence);
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.CANCELED.getCode());
                    xpOrderClient.updateOrderStatus(Long.parseLong(orderId.contains("XU") ? orderId.substring(2) : orderId), OrderStatusEnum.CANCELED.getCode());
                    break;
                case ORDER_ARRIVED_AT_CRUISE_DESTINATION:
                    //到达巡游终点
@@ -923,33 +913,10 @@
                        if(xpCruiseOrder.getOrderType()==2){
                            R<XpCruiseOrder> lastOrder = xpCruiseOrderClient.getCruiseOrder(xpCruiseOrder.getLastOrderId());
                            XpCruiseOrder lastXpCruiseOrder = lastOrder.getData();
                            // 修改一下id 加一个一样的巡游单子
                            lastXpCruiseOrder.setId(null);
                            lastXpCruiseOrder.setStatus(1);
                            xpCruiseOrderClient.addCruiseOrder(lastXpCruiseOrder);
                            //构建下发XPU订单报文数据
                            RtTask.Builder taskBuilder = RtTask.newBuilder();
                            taskBuilder.setOrderId("XU" + lastXpCruiseOrder.getId());
                            taskBuilder.setTaskId(snowflake.nextId() + "");
                            taskBuilder.setTaskType(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderType.ORDER_TYPE_CRUISE);
                            //构建点位信息
                            Waypoint.Builder pointBuilder = Waypoint.newBuilder();
                            pointBuilder.setPointType(PointType.CRUISE_END_POINT);
                            pointBuilder.setSequence(1);
                            //构建终点坐标
                            GeoPoint.Builder geoPointBuilder = GeoPoint.newBuilder();
                            geoPointBuilder.setLatitude(lastXpCruiseOrder.getEndLat());
                            geoPointBuilder.setLongitude(lastXpCruiseOrder.getEndLat());
                            // geoPointBuilder.setPoiName("Start Point"); // GeoPoint might not have poi_name
                            pointBuilder.setPoint(geoPointBuilder.build());
                            taskBuilder.addPoints(pointBuilder);
                            RtTask task = taskBuilder.build();
                            RtTaskList taskList = RtTaskList.newBuilder().addTasks(task).build();
                            long sequence1 = snowflake.nextId();
                            xpuUtil.cloudCreateOrder(taskList, xpVehicle.getVehicleVin(),sequence1);
                        }else if(xpCruiseOrder.getOrderType()==1){
                           // 正常巡游 找到下一个点位   若到达最后点位  则反向找点位
                            // 起点
@@ -967,7 +934,6 @@
                            newXpCruiseOrder.setStatus(1);
                            newXpCruiseOrder.setLastOrderId(xpCruiseOrder.getId());
                            // 通过车找终点id
                            CruisePointDto cruisePointDto = new CruisePointDto();
                            cruisePointDto.setNewXpCruiseOrder(newXpCruiseOrder);
@@ -977,29 +943,6 @@
                            R<XpCruiseOrder> cruisePoint = xpCruisePlanClient.getCruisePoint(cruisePointDto);
                            if(cruisePoint!=null){
                                xpCruiseOrderClient.addCruiseOrder(cruisePoint.getData());
                                RtTask.Builder taskBuilder = RtTask.newBuilder();
                                taskBuilder.setOrderId("XU" + newXpCruiseOrder.getId());
                                taskBuilder.setTaskId(snowflake.nextId() + "");
                                taskBuilder.setTaskType(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderType.ORDER_TYPE_CRUISE);
                                //构建点位信息
                                Waypoint.Builder pointBuilder = Waypoint.newBuilder();
                                pointBuilder.setPointType(PointType.CRUISE_END_POINT);
                                pointBuilder.setSequence(1);
                                //构建终点坐标
                                GeoPoint.Builder geoPointBuilder = GeoPoint.newBuilder();
                                geoPointBuilder.setLatitude(cruisePoint.getData().getEndLat());
                                geoPointBuilder.setLongitude(cruisePoint.getData().getEndLat());
                                // geoPointBuilder.setPoiName("Start Point"); // GeoPoint might not have poi_name
                                pointBuilder.setPoint(geoPointBuilder.build());
                                taskBuilder.addPoints(pointBuilder);
                                RtTaskList.Builder taskListBuilder = RtTaskList.newBuilder();
                                taskListBuilder.addTasks(taskBuilder.build());
                                long sequence1 = snowflake.nextId();
                                xpuUtil.cloudCreateOrder(taskListBuilder.build(), xpVehicle.getVehicleVin(),sequence1);
                            }
                        }
                    }
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-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/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/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-map-boot/src/main/java/com/xiaopeng/map/utils/GDMapGeocodingUtil.java
@@ -118,8 +118,7 @@
        params.put("encoderVersion", "5.1");
        String post = HttpUtils.post(url, JSON.toJSONString(params));
        System.out.println("高德地图返回结果:"+ post);
        JSONObject jsonObject = JSON.parseObject(post);
        return jsonObject.getString("data");
        return post;
    }
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/XpPointServiceImpl.java
@@ -139,7 +139,7 @@
            double v = FastDistanceCalculator.distanceFast(dto.getLatitude(), dto.getLongitude(), xpPoint.getPointLat(), xpPoint.getPointLon());
            // m做判断
            if ((v*1000) < orderDistance) {
            if ((v) < orderDistance) {
                NearestNextVo nearestNextVo = new NearestNextVo();
                nearestNextVo.setId(xpPoint.getId());
                nearestNextVo.setName(xpPoint.getPointName());
@@ -227,6 +227,7 @@
        ArrayList<XpHistoryStartPointsVo> resultList = new ArrayList<>(10);
        for (XpPoint xpPoint : xpPoints) {
            XpHistoryStartPointsVo xpHistoryStartPointsVo = new XpHistoryStartPointsVo();
            xpHistoryStartPointsVo.setOperationStatus(xpPoint.getOperationStatus());
            xpHistoryStartPointsVo.setName(xpPoint.getPointName());
            xpHistoryStartPointsVo.setAddress(xpPoint.getPointAddress());
            xpHistoryStartPointsVo.setLatitude(xpPoint.getPointLat());
@@ -249,6 +250,7 @@
        ArrayList<XpHistoryEndPointsVo> resultList = new ArrayList<>(10);
        for (XpPoint xpPoint : xpPoints) {
            XpHistoryEndPointsVo xpHistoryEndPointsVo = new XpHistoryEndPointsVo();
            xpHistoryEndPointsVo.setOperationStatus(xpPoint.getOperationStatus());
            xpHistoryEndPointsVo.setName(xpPoint.getPointName());
            xpHistoryEndPointsVo.setAddress(xpPoint.getPointAddress());
            xpHistoryEndPointsVo.setLatitude(xpPoint.getPointLat());
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/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) {
@@ -2192,9 +2200,9 @@
        // 计算时间差
        Duration durationBetween = Duration.between(createTime, tripEnd);
        // 转换为分钟并保留一位小数
        // 转换为秒并保留一位小数
        BigDecimal minutes = BigDecimal.valueOf(durationBetween.getSeconds())
                .divide(BigDecimal.valueOf(60), 1, RoundingMode.HALF_UP);
                ;
        res.setTime(minutes);
        return R.ok(res);
    }
@@ -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
@@ -114,6 +114,7 @@
    /**
     * 转换为页面 VO
     *
     * @param item
     * @param longXpVehicleMap
     * @param longXpOperationsUserMap
@@ -121,7 +122,7 @@
     * @return
     */
    private XpPolicyApplicationVO convertToPageVO(XpPolicyApplication item, Map<Long, XpVehicle> longXpVehicleMap,
                                 Map<Long, XpOperationsUser> longXpOperationsUserMap, Map<Long, SysUser> auditUserMap) {
                                                  Map<Long, XpOperationsUser> longXpOperationsUserMap, Map<Long, SysUser> auditUserMap) {
        XpPolicyApplicationVO xpPolicyApplicationVO = BeanUtil.copyProperties(item, XpPolicyApplicationVO.class);
        xpPolicyApplicationVO.setAuditStatusDesc(AuditStateEnum.getDescByCode(item.getAuditStatus()));
        // 车辆信息
@@ -207,7 +208,6 @@
        return new HashMap<>();
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void batchAudit(XpPolicyApplicationAuditDTO dto) {
        // 1.查询待审核的保单申请记录
@@ -255,12 +255,12 @@
                XpVehicle xpVehicle = xpVehicleMapper.selectById(xpPolicyApplication.getVehicleId());
                xpPolicyApplicationVO.setPlateNumber(xpVehicle.getPlateNumber());
                xpPolicyApplicationVO.setVehicleCode(xpVehicle.getVehicleCode());
                if(xpPolicyApplicationVO.getAuditStatus() == 2){
                if (xpPolicyApplicationVO.getAuditStatus() == 2) {
                    xpPolicyApplicationVO.setPolicyInformation(xpVehicle.getPolicyInformation());
                }
            }
            queryPolicyInfoVO.setStatus(xpPolicyApplication.getAuditStatus());
        }else {
        } else {
            queryPolicyInfoVO.setStatus(0);
        }
        return queryPolicyInfoVO;
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;
@@ -350,7 +352,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addVehicle(VehicleAddDTO dto) {
        String normalizedVehicleCode = trimToNull(dto.getVehicleCode());
        String normalizedVin = normalizeVin(dto.getVehicleVin());
@@ -382,7 +383,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void editVehicle(VehicleEditDTO dto) {
        String normalizedVehicleCode = trimToNull(dto.getVehicleCode());
        String normalizedVin = normalizeVin(dto.getVehicleVin());
@@ -475,7 +475,8 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
    public void improveInfo(VehicleImproveInfoDTO dto) {
        // 校验已填写的时间字段是否在有效范围内
        validateTimeFields(dto);
@@ -657,7 +658,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchOperation(String idStr) {
        if (StringUtils.isBlank(idStr)) {
            return;
@@ -750,7 +750,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchStock(String idStr) {
        if (StringUtils.isBlank(idStr)) {
            return;
@@ -764,7 +763,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchSetElectronic(List<Long> ids, Long electronicId) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
@@ -835,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();