xuhy
2026-04-18 0b4174396fc9dad549d96716acc8990d2d08fe4c
[feat] 首次进入活动
8个文件已修改
85 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicity.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/constant/CacheConstants.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActicityService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicity.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.common.core.web.domain.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -26,7 +25,7 @@
@Accessors(chain = true)
@TableName("xp_acticity")
@ApiModel(value="XpActicity对象", description="活动管理")
public class XpActicity extends BaseModel {
public class XpActicity {
    private static final long serialVersionUID = 1L;
@@ -56,5 +55,13 @@
    @ApiModelProperty(value = "邀请启用 1=是 0=否")
    private Boolean inviteEnable;
    @ApiModelProperty(value = "是否删除")
    private String deleted;
    @ApiModelProperty(value = "图片")
    private String img;
    @ApiModelProperty(value = "是否第一次 1=是 0=否")
    private Boolean isFirst;
}
xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/constant/CacheConstants.java
@@ -147,6 +147,11 @@
     */
    public static final String USER_ROUTE_PREFERENCE = "USER_ROUTE_PREFERENCE:";
    public static final String ACTIVITY_FIRST_ENTER = "ACTIVITY:FIRST_ENTER:";
    public static String firstEnterActivity(String key, String id) {
        return ACTIVITY_FIRST_ENTER + key + ":" + id;
    }
    /**
     * 重新派单 改派
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -104,8 +104,8 @@
    @ApiOperation(value = "接收工单", tags = "运维APP-任务中心")
    @PostMapping("/maintenance-app/api/v1/task/accept")
    public R<?> accept(@RequestBody TaskVO taskVO) {
        xpTaskService.accept(taskVO);
    public R<?> accept(@RequestParam String taskId) {
        xpTaskService.accept(taskId);
        return R.ok();
    }
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java
@@ -100,5 +100,5 @@
    void saveVehicleAccidentError(Long vehicleI);
    void accept(TaskVO taskVO);
    void accept(String taskId);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -1473,10 +1473,12 @@
    @Override
    @Transactional
    public void accept(TaskVO taskVO) {
    public void accept(String taskId) {
        updateTaskStatus(taskVO.getId(), TaskScheduleConstants.TASK_STATUS_PENDING_ARRIVE, Long.valueOf(taskVO.getHandleUserId()));
        sendAccidentNotificationAsync(getById(taskVO.getId()), taskVO.getPlateNumber(), (int) Duration.between(LocalDateTime.now(),taskVO.getEndTime()).toMinutes());
        XpTask task = getById(Long.valueOf(taskId));
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        updateTaskStatus(task.getId(), TaskScheduleConstants.TASK_STATUS_PENDING_ARRIVE, Long.valueOf(task.getHandleUserId()));
        sendAccidentNotificationAsync(getById(task.getId()), vehicle.getPlateNumber(), (int) Duration.between(LocalDateTime.now(),task.getEndTime()).toMinutes());
    }
    @Value("${robotaxi.sms.app-id:1476153389173952512}")
@@ -1485,6 +1487,7 @@
    private String ROBOTAXI_VERIFY_CODE_SMS_TPL;
    @Resource
    private SmsClient smsClient;
    private void noticeAdministrator(XpTask task) {
        SmsVo smsVo = new SmsVo();
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java
@@ -1,16 +1,24 @@
package com.xiaopeng.operation.controller;
import com.xiaopeng.api.model.operation.XpActicity;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.utils.bean.BeanUtils;
import com.xiaopeng.operation.service.IXpActicityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -41,4 +49,32 @@
        }
        return R.ok(xpActicityService.findListToIds(acticityName));
    }
    @Resource
    RedisTemplate<String, String> redisTemplate;
    /**
     * 是否第一次进入某活动
     * @return 活动信息,id 和 img
     */
    @PostMapping("/logan/inner/acticity/findListToIds")
    @ApiOperation(value = "获取活动信息ids", tags = {"管理后台-活动首次进入情况"})
    public R<XpActicity> firstEnter(HttpServletRequest request){
        String uid = request.getHeader("XP-Uid");
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        XpActicity acticity = xpActicityService.activiting();
        XpActicity ret = new XpActicity();
        if (acticity !=null) {
            BeanUtils.copyBeanProp(ret, acticity);
            Duration duration = Duration.between(LocalDateTime.now(), acticity.getEndTime());
            Boolean isFirst = ops.setIfAbsent(CacheConstants.firstEnterActivity(String.valueOf(acticity.getId()), uid),"1", duration);
            ret.setIsFirst(isFirst);
        }
        return R.ok(acticity);
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActicityService.java
@@ -17,4 +17,6 @@
    List<String> findListToIds(String acticityName);
    XpActicity activiting();
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java
@@ -7,7 +7,9 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Random;
/**
 * <p>
@@ -24,11 +26,23 @@
    @Override
    public List<String> findListToIds(String acticityName){
        LambdaQueryWrapper<XpActicity > query = new LambdaQueryWrapper<>();
        LambdaQueryWrapper<XpActicity> query = new LambdaQueryWrapper<>();
        query.select(XpActicity::getId);
        query.eq(XpActicity::getDeleted, 0);
        query.like(XpActicity::getActicityName, acticityName);
        return listObjs(query, Object::toString);
    }
    @Override
    public XpActicity activiting() {
        LambdaQueryWrapper<XpActicity> query = new LambdaQueryWrapper<>();
        LocalDateTime now = LocalDateTime.now();
        query.le(XpActicity::getStartTime, now)
                .ge(XpActicity::getEndTime, now);
        List<XpActicity> list = list(query);
        if(!list.isEmpty()){
            return list.get(new Random().nextInt(list.size()));
        }
        return null;
    }
}