puzhibing
2026-04-29 4c5d99fd2e9c264ebf7cfb532fae430fb6f7f66b
Merge remote-tracking branch 'origin/1.0' into 1.0
16个文件已修改
280 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/operation/XpActivityDto.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityStrategy.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityUser.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivity.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivityNotice.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityStrategyServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/OrderDistanceVo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/mapper/XpOrderMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/resources/mapper/order/XpOrderMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/controller/WebSocketController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/operation/XpActivityDto.java
@@ -29,8 +29,11 @@
    @ApiModelProperty(value = "活动类型 如新人活动、媒体邀约活动、日常提频等")
    private Integer activityType;
    @ApiModelProperty(value = "活动类型 如新人活动、媒体邀约活动、日常提频等")
    private Integer acticityType;
    @ApiModelProperty(value = "是否开启活动总限额")
    private boolean enableTotalLimit;
    private Boolean enableTotalLimit;
    @ApiModelProperty(value = "是否开启活动总限额")
    private BigDecimal totalLimit;
@@ -67,7 +70,59 @@
    @ApiModelProperty(value = "发放用户")
    List<XpActicityUser> activityUser;
    @ApiModelProperty(value = "活动通知")
    XpActivityNotice notice;
    @ApiModelProperty("微信通知(0=否,1=是)")
    private Integer wechatNotification;
    @ApiModelProperty("微信通知到账提醒(0=否,1=是)")
    private Integer wechatReceivedReminder;
    @ApiModelProperty("微信通知即将过期提醒(0=否,1=是)")
    private Integer wechatAboutExpireReminder;
    @ApiModelProperty("微信通知即将过期天数")
    private Integer wechatAboutExpireDays;
    @ApiModelProperty("微信通知活动开始提醒(0=否,1=是)")
    private Integer wechatActicityStart;
    @ApiModelProperty("微信通知临近券生效前X分钟通知")
    private Integer wechatActicityStartMinutes;
    @ApiModelProperty("短信通知(0=否,1=是)")
    private Integer smsNotification;
    @ApiModelProperty("短信通知到账提醒(0=否,1=是)")
    private Integer smsReceivedReminder;
    @ApiModelProperty("短信通知即将过期提醒(0=否,1=是)")
    private Integer smsAboutExpireReminder;
    @ApiModelProperty("短信通知即将过期天数")
    private Integer smsAboutExpireDays;
    @ApiModelProperty("短信通知活动开始提醒(0=否,1=是)")
    private Integer smsActicityStart;
    @ApiModelProperty("短信通知临近券生效前X分钟通知")
    private Integer smsActicityStartMinutes;
    @ApiModelProperty("短信通知屏蔽开始时间")
    private String smsStartBlockingTime;
    @ApiModelProperty("短信通知屏蔽结束时间")
    private String smsEndBlockingTime;
    @ApiModelProperty("小程序弹窗通知(0=否,1=是)")
    private Integer miniProgramNotification;
    @ApiModelProperty("小程序弹窗标题")
    private String miniProgramPopupTitle;
    @ApiModelProperty("小程序弹窗按钮文案")
    private String miniProgramBtnText;
    @ApiModelProperty("小程序弹窗券到账提醒(0=否,1=是)")
    private String miniProgramReceivedReminder;
    @ApiModelProperty("小程序弹窗即将过期提醒(0=否,1=是)")
    private String miniProgramAboutExpireReminder;
    @ApiModelProperty("小程序弹窗临近券生效前X分钟")
    private Integer miniProgramAboutExpireMinutes;
    @ApiModelProperty("通知内容")
    private String expireMinutesNotificationContent;
    @ApiModelProperty("小程序弹窗临近到期时间前X天")
    private Integer aboutExpireDays;
    @ApiModelProperty("通知内容")
    private String expireDaysNotificationContent;
    @ApiModelProperty("是否开启浮窗(0=否,1=是)")
    private Integer enableFloatWindow;
    @ApiModelProperty("浮窗优先级权重")
    private Integer floatWindowPriority;
    @ApiModelProperty("浮窗跳转链接")
    private String floatWindowJumpUrl;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityStrategy.java
@@ -11,6 +11,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Value;
import lombok.experimental.Accessors;
import java.time.LocalDate;
@@ -44,6 +45,9 @@
    @ApiModelProperty(value = "发放规则(1=每日循环发放,2=仅发放一次,3=使用后发放)")
    private Integer distributionRules;
    @ApiModelProperty(value = "每日循环发放时间")
    private String distributionTime;
    @ApiModelProperty(value = "发放规则json,[]=本券使用后循环发放, [1,2,3]=指定优惠券使用后发放(优惠券id数组)")
    @TableField(typeHandler = JacksonTypeHandler.class)
@@ -87,4 +91,12 @@
    @ApiModelProperty(value = "是否自动使用(0=不开启,1=冒泡发单时自动使用)")
    private Integer startUsing;
    @ApiModelProperty(value = "优惠券id数据")
    @TableField(exist = false)
    private List<Long> couponIds;
    @ApiModelProperty(value = "优惠券列表数据")
    @TableField(exist = false)
    private List<XpCoupon> couponList;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityUser.java
@@ -2,14 +2,18 @@
import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.xiaopeng.common.core.web.domain.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.List;
/**
 * <p>
@@ -42,7 +46,8 @@
    private Integer userType;
    @ApiModelProperty(value = "指定用户json数组")
    private JSONArray userList;
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<Long> userList;
    @ApiModelProperty(value = "策略组名称")
    private String strategyName;
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivity.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.api.vo.account.CouponVo;
import com.xiaopeng.common.core.web.domain.BaseModel;
@@ -50,7 +51,7 @@
    private BigDecimal limitation;
    @ApiModelProperty(value = "封面图片json")
    private JSONObject coverImage;
    private String coverImage;
    @ApiModelProperty(value = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -98,9 +99,9 @@
    @ApiModelProperty("短信通知临近券生效前X分钟通知")
    private Integer smsActicityStartMinutes;
    @ApiModelProperty("短信通知屏蔽开始时间")
    private LocalDateTime smsStartBlockingTime;
    private String smsStartBlockingTime;
    @ApiModelProperty("短信通知屏蔽结束时间")
    private LocalDateTime smsEndBlockingTime;
    private String smsEndBlockingTime;
    @ApiModelProperty("小程序弹窗通知(0=否,1=是)")
    private Integer miniProgramNotification;
    @ApiModelProperty("小程序弹窗标题")
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivityNotice.java
@@ -66,9 +66,9 @@
    private List<String> blockTime;
    @ApiModelProperty(value = "miniProgram临近到期toast")
    private Integer toastBeforeExpiry;
    private String toastBeforeExpiry;
    @ApiModelProperty(value = "miniProgram临近生效toast")
    private Integer toastBeforeEffective;
    private String toastBeforeEffective;
    @ApiModelProperty(value = "是否开启浮窗")
    private Boolean enableFloatingWindow;
    @ApiModelProperty(value = "浮窗优先级权重1-100")
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -42,10 +42,7 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -806,7 +803,7 @@
                    dto.setDistance(10.0);
                    dto.setDirection(60);
                    dto.setMessageType(PushMessageTypeEnum.ORDER_ROUTE.getDesc());
                    xpPushMessageClient.pushOrderRoute(dto);
                    R<String> stringR = xpPushMessageClient.pushOrderRoute(dto);
                    //存储历史轨迹
                    OrderTrajectoryVo orderTrajectory = new OrderTrajectoryVo();
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java
@@ -161,7 +161,6 @@
            List<XpActicityStrategy> strategies = strategyService.lambdaQuery().eq(XpActicityStrategy::getActitcityId, dto.getId()).list();
            dto.setStrategy(strategies);
            dto.setActivityUser(userService.lambdaQuery().eq(XpActicityUser::getActitcityId, dto.getId()).list());
            dto.setNotice(noticeService.lambdaQuery().eq(XpActivityNotice::getActivityId, dto.getId()).one());
        }
        return R.ok(pageList);
    }
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java
@@ -5,18 +5,12 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.dto.operation.XpActivityDto;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.model.operation.XpActicityStrategy;
import com.xiaopeng.api.model.operation.XpActicityUser;
import com.xiaopeng.api.model.operation.XpActivity;
import com.xiaopeng.api.model.operation.XpActivityNotice;
import com.xiaopeng.api.model.operation.*;
import com.xiaopeng.api.query.operation.XpActivityPageListQuery;
import com.xiaopeng.common.core.utils.bean.BeanUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.operation.mapper.XpActicityMapper;
import com.xiaopeng.operation.service.IXpActicityService;
import com.xiaopeng.operation.service.IXpActicityStrategyService;
import com.xiaopeng.operation.service.IXpActicityUserService;
import com.xiaopeng.operation.service.IXpActivityNoticeService;
import com.xiaopeng.operation.service.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -49,6 +43,9 @@
    @Resource
    private XpOrderClient xpOrderClient;
    @Resource
    private IXpActicityCouponService xpActicityCouponService;
@@ -92,29 +89,43 @@
    }
    @Override
    @Transactional
    public void save(XpActivityDto dto) {
        XpActivity activity = new XpActivity();
        BeanUtils.copyBeanProp(activity, dto);
        activity.setActicityType(dto.getActivityType());
        activity.setAggregateLimit(dto.getEnableTotalLimit() ? 1 : 0);
        activity.setLimitation(dto.getTotalLimit());
        activity.setCoverImage(dto.getImg());
        activity.setRemarks(dto.getRichText());
        save(activity);
        List<XpActicityStrategy> strategy = dto.getStrategy();
        List<XpActicityUser> activityUser = dto.getActivityUser();
        XpActivityNotice notice = dto.getNotice();
        strategy.forEach(e -> e.setActitcityId(activity.getId().intValue()));
        strategyService.saveBatch(strategy);
        for (XpActicityStrategy xpActicityStrategy : strategy) {
            xpActicityStrategy.setActitcityId(activity.getId().intValue());
            xpActicityStrategy.setDeleted(false);
            strategyService.save(xpActicityStrategy);
            List<Long> couponIds = xpActicityStrategy.getCouponIds();
            for (Long couponId : couponIds) {
                XpActicityCoupon xpActicityCoupon = new XpActicityCoupon();
                xpActicityCoupon.setActicityStrategyId(xpActicityStrategy.getId().longValue());
                xpActicityCoupon.setCouponId(couponId);
                xpActicityCoupon.setActivityId(activity.getId());
                xpActicityCouponService.save(xpActicityCoupon);
            }
        }
        Map<String, XpActicityStrategy> strategyMap = strategy.stream().collect(Collectors.toMap(
                XpActicityStrategy::getName,
                Function.identity()
        ));
        activityUser.forEach(item -> {
            item.setActitcityId(activity.getId().intValue());
            item.setActitcityStrategeId(strategyMap.get(item.getStrategyName()).getId());
        });
        notice.setActivityId(activity.getId());
        userService.saveBatch(activityUser);
        activityNotice.save(notice);
        for (XpActicityUser xpActicityUser : activityUser) {
            xpActicityUser.setActitcityId(activity.getId().intValue());
            xpActicityUser.setActitcityStrategeId(strategyMap.get(xpActicityUser.getStrategyName()).getId());
            userService.save(xpActicityUser);
        }
    }
    @Override
@@ -122,6 +133,11 @@
        XpActivity byId = getById(id);
        XpActivityDto ret = new XpActivityDto();
        BeanUtils.copyBeanProp(ret, byId);
        ret.setActicityType(byId.getActicityType());
        ret.setEnableTotalLimit(byId.getAggregateLimit() == 1);
        ret.setTotalLimit(byId.getLimitation());
        ret.setImg(byId.getCoverImage());
        ret.setRichText(byId.getRemarks());
        ret.setStrategy(strategyService.listByActicityId(id));
        ret.setActivityUser(userService.listByActicityId(id));
        return ret;
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityStrategyServiceImpl.java
@@ -1,13 +1,20 @@
package com.xiaopeng.operation.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.model.operation.XpActicityCoupon;
import com.xiaopeng.api.model.operation.XpActicityStrategy;
import com.xiaopeng.api.model.operation.XpCoupon;
import com.xiaopeng.operation.mapper.XpActicityStrategyMapper;
import com.xiaopeng.operation.service.IXpActicityCouponService;
import com.xiaopeng.operation.service.IXpActicityStrategyService;
import com.xiaopeng.operation.service.IXpCouponService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -20,8 +27,23 @@
@Service
public class XpActicityStrategyServiceImpl extends ServiceImpl<XpActicityStrategyMapper, XpActicityStrategy> implements IXpActicityStrategyService {
    @Resource
    private IXpCouponService xpCouponService;
    @Resource
    private IXpActicityCouponService xpActicityCouponService;
    @Override
    public List<XpActicityStrategy> listByActicityId(Long id) {
        return baseMapper.selectList(new LambdaQueryWrapper<XpActicityStrategy>().eq(XpActicityStrategy::getActitcityId, id));
        List<XpActicityStrategy> xpActicityStrategies = baseMapper.selectList(new LambdaQueryWrapper<XpActicityStrategy>().eq(XpActicityStrategy::getActitcityId, id));
        for (XpActicityStrategy xpActicityStrategy : xpActicityStrategies) {
            List<XpActicityCoupon> list = xpActicityCouponService.list(new QueryWrapper<XpActicityCoupon>().eq("acticity_strategy_id", xpActicityStrategy.getId()));
            if(null != list && !list.isEmpty()){
                List<Long> couponIds = list.stream().map(XpActicityCoupon::getCouponId).collect(Collectors.toList());
                List<XpCoupon> xpCoupons = xpCouponService.list(new QueryWrapper<XpCoupon>().in("id", couponIds));
                xpActicityStrategy.setCouponList(xpCoupons);
            }
        }
        return xpActicityStrategies;
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java
@@ -5,6 +5,7 @@
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.dto.operation.PointMapQuery;
import com.xiaopeng.api.dto.order.HistoryEndPointsDto;
@@ -29,6 +30,7 @@
import com.xiaopeng.operation.query.PointByNameQuery;
import com.xiaopeng.operation.service.IXpElectronicFenceAreaService;
import com.xiaopeng.operation.service.IXpElectronicFenceService;
import com.xiaopeng.operation.service.IXpTradingStrategyService;
import com.xiaopeng.operation.service.XpPointService;
import com.xiaopeng.operation.utils.TimeRangeChecker;
import com.xiaopeng.operation.utils.holiday.HolidayUtil;
@@ -83,6 +85,9 @@
    @Resource
    private AliOssService aliOssService;
    @Resource
    private IXpTradingStrategyService xpTradingStrategyService;
    /**
     * 如果站点是挂在场站下的  需要返回一个场站id   stationId
@@ -728,6 +733,13 @@
    @Override
    public OrderDistanceVo getOrderDistance() {
        OrderDistanceVo orderDistanceVo = new OrderDistanceVo();
        XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null);
        if(null != xpTradingStrategy){
            orderDistanceVo.setQueuePollingTime(xpTradingStrategy.getQueuePollingTime());
            orderDistanceVo.setWalkingNavigationDistance(xpTradingStrategy.getWalkingNavigationDistance());
            orderDistanceVo.setMaxStandingTiming(xpTradingStrategy.getMaxStandingTiming());
        }
        XpSystemSetting xpSystemSetting = xpSystemSettingMapper.selectOne(null);
        if (xpSystemSetting != null) {
            orderDistanceVo.setMaxDistance(xpSystemSetting.getOrderDistance());
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/OrderDistanceVo.java
@@ -23,4 +23,13 @@
    @ApiModelProperty(value = "天气单位")
    private String temperatureUnit;
    @ApiModelProperty("首页轮询接口间隔 秒")
    private Integer queuePollingTime;
    @ApiModelProperty("步行图标控制距离 米")
    private Integer walkingNavigationDistance;
    @ApiModelProperty("下单页停留时长")
    private Integer maxStandingTiming;
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -500,7 +500,7 @@
     * +
     * 获取行程费用明细
     */
    @PutMapping("/api/v1/mini-program/order/fare-breakdown")
    @PostMapping("/api/v1/mini-program/order/fare-breakdown")
    @ApiOperation(value = "获取行程费用明细", tags = {"小程序-获取行程费用明细"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<FareBreakdownVo> fareBreakdown(@RequestBody com.xiaopeng.order.vo.FareBreakdownVo vo, HttpServletRequest request) {
@@ -619,8 +619,8 @@
        Object cacheObject = redisService.getCacheObject(key);
        RouteVo routeVo = JSON.parseObject(cacheObject.toString(), RouteVo.class);
        XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
        routeVo.setDirection(null != vehiclePosition ? vehiclePosition.getCourse() : 90);
//        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
//        routeVo.setDirection(null != vehiclePosition ? vehiclePosition.getCourse() : 90);
        Long vehicleId = xpOrder.getVehicleId();
        XpOrder one = xpOrderService.getOne(new QueryWrapper<XpOrder>().eq("vehicle_id", vehicleId).in("status", Arrays.asList(6, 7)).eq("is_deleted", 0));
@@ -721,7 +721,7 @@
        //判断流失用户
        XpOrder one = xpOrderService.getOne(new QueryWrapper<XpOrder>().eq("app_user_id", userId).in("status", Arrays.asList(9, 10)).last(" order by create_time desc limit 1"));
        if(null != one){
            long time = LocalDateTime.now().toEpochSecond(ZoneOffset.of("GMT+8")) - one.getCreateTime().toEpochSecond(ZoneOffset.of("GMT+8"));
            long time = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) - one.getCreateTime().toEpochSecond(ZoneOffset.of("+8"));
            if(time >= 60 * 60 * 24 * 5){
                return R.ok(4);
            }
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/mapper/XpOrderMapper.java
@@ -74,7 +74,11 @@
    List<XpOrder> listUserRecentValidOrders(@Param("uid") Long uid, @Param("startTime") LocalDateTime startTime);
    List<Long> timeSceneOrders(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDateTime endDate, @Param("startMoment") LocalTime startMoment, @Param("endMoment") LocalTime endMoment, @Param("userId") Long userId);
    List<Long> timeSceneOrders(@Param("startDate") LocalDate startDate,
                               @Param("endDate") LocalDateTime endDate,
                               @Param("startMoment") LocalTime startMoment,
                               @Param("endMoment") LocalTime endMoment,
                               @Param("userId") Long userId);
    List<Long> frequencyOrders(LocalDate startDate, LocalDateTime endDate, LocalTime startMoment, LocalTime endMoment, Long userId);
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -3579,34 +3579,34 @@
                        .plusMinutes(routeVo1.getDuration()).plusMinutes(endPoint.getParkingTimeLimit()).plusMinutes(30);
                long expirationTime = localDateTime.toEpochSecond(ZoneOffset.of("+8"));
                //生成token
                String token = bluetoothUnlockTokenUtil.generateBluetoothUnlockToken(order.getAppUserId(),
                        order.getId(), order.getVehicleId(), expirationTime);
                log.info("生成蓝牙token:{} 有效期:{} 订单号: {}", token, expirationTime, order.getOrderNumber());
                //存储缓存
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("userId", order.getAppUserId());
                jsonObject.put("orderId", order.getId());
                jsonObject.put("vehicleId", order.getVehicleId());
                jsonObject.put("expirationTime", expirationTime);
                jsonObject.put("orderNumber", order.getOrderNumber());
                jsonObject.put("vehicleVin", vehicle.getVehicleVin());
                jsonObject.put("createTime", System.currentTimeMillis());
                redisService.setCacheObject("rt:bluetooth:unlock:" + token, jsonObject.toJSONString(), expirationTime, TimeUnit.SECONDS);
                redisService.setCacheObject("rt:bluetooth:unlock:order:" + order.getId(), token, expirationTime, TimeUnit.SECONDS);
                //开始下发蓝牙token
                BluetoothDeliverVo vo = new BluetoothDeliverVo();
                vo.setCredential(token);
                vo.setVim(vehicle.getVehicleVin());
                vo.setPassengerUid(order.getAppUserId());
                BaseVehicleUserDto deliver = bluetoothUnlockClient.deliver(vo);
                if(null == deliver){
                    throw new ServiceException("下发蓝牙token失败");
                }
                if(deliver.getCode() != 0){
                    log.error("下发蓝牙token失败:{} {}", deliver.getMsg(), order.getOrderNumber());
                    throw new ServiceException(deliver.getMsg());
                }
                log.info("下发蓝牙token成功:{} {}", deliver.getData(), order.getOrderNumber());
//                String token = bluetoothUnlockTokenUtil.generateBluetoothUnlockToken(order.getAppUserId(),
//                        order.getId(), order.getVehicleId(), expirationTime);
//                log.info("生成蓝牙token:{} 有效期:{} 订单号: {}", token, expirationTime, order.getOrderNumber());
//                //存储缓存
//                JSONObject jsonObject = new JSONObject();
//                jsonObject.put("userId", order.getAppUserId());
//                jsonObject.put("orderId", order.getId());
//                jsonObject.put("vehicleId", order.getVehicleId());
//                jsonObject.put("expirationTime", expirationTime);
//                jsonObject.put("orderNumber", order.getOrderNumber());
//                jsonObject.put("vehicleVin", vehicle.getVehicleVin());
//                jsonObject.put("createTime", System.currentTimeMillis());
//                redisService.setCacheObject("rt:bluetooth:unlock:" + token, jsonObject.toJSONString(), expirationTime, TimeUnit.SECONDS);
//                redisService.setCacheObject("rt:bluetooth:unlock:order:" + order.getId(), token, expirationTime, TimeUnit.SECONDS);
//                //开始下发蓝牙token
//                BluetoothDeliverVo vo = new BluetoothDeliverVo();
//                vo.setCredential(token);
//                vo.setVim(vehicle.getVehicleVin());
//                vo.setPassengerUid(order.getAppUserId());
//                BaseVehicleUserDto deliver = bluetoothUnlockClient.deliver(vo);
//                if(null == deliver){
//                    throw new ServiceException("下发蓝牙token失败");
//                }
//                if(deliver.getCode() != 0){
//                    log.error("下发蓝牙token失败:{} {}", deliver.getMsg(), order.getOrderNumber());
//                    throw new ServiceException(deliver.getMsg());
//                }
//                log.info("下发蓝牙token成功:{} {}", deliver.getData(), order.getOrderNumber());
            }
            if(order.getStatus() == 2){
@@ -3792,9 +3792,11 @@
        }
        Integer status = xpOrder.getStatus();
        if(status > 2 && status < 8){
            Boolean data = xpVehicleClient.getVehicleTrunkOpenStatus(xpOrder.getAppUserId(), xpOrder.getVehicleId()).getData();
            xpOrder.setOpenTrunk(data ? 1 : 2);
            xpOrderDetailVO.setOpenTrunk(data ? 1 : 2);
//            Boolean data = xpVehicleClient.getVehicleTrunkOpenStatus(xpOrder.getAppUserId(), xpOrder.getVehicleId()).getData();
//            xpOrder.setOpenTrunk(data ? 1 : 2);
//            xpOrderDetailVO.setOpenTrunk(data ? 1 : 2);
            xpOrder.setOpenTrunk(2);
            xpOrderDetailVO.setOpenTrunk(2);
            xpOrder.setAppUserId(null);
            this.updateById(xpOrder);
        }
xp-robotaxi-order-boot/src/main/resources/mapper/order/XpOrderMapper.xml
@@ -108,7 +108,7 @@
          AND is_deleted = 0
          AND status IN (9, 10)
          AND DATE(create_time) BETWEEN #{startDate} AND #{endDate}
          AND TIME(create_time) BETWEEN #{startTime} AND #{endTime}
          AND TIME(create_time) BETWEEN #{startMoment} AND #{endMoment}
        GROUP BY end_point_id
        ORDER BY COUNT(*) DESC
    </select>
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/controller/WebSocketController.java
@@ -46,7 +46,7 @@
     * @return 操作结果
     */
    @ApiOperation(value = "发送订单状态")
    @PostMapping("/inner/websocket/order/sendStatus")
    @PostMapping("/logan/inner/websocket/order/sendStatus")
    public R<String> sendStatus(@RequestBody SendMessageDTO dto) {
        try {
            String message = dto.getMessage();