liujie
2026-06-09 c96fbe6b0aeb413a17c429133ee6d81d138144b9
xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/controller/WebSocketController.java
@@ -4,8 +4,11 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
import com.xiaopeng.api.vo.XpTaskVO;
import com.xiaopeng.api.vo.pushMessage.SendCouponMessageVo;
import com.xiaopeng.api.vo.pushMessage.UpdateEndAddStatusVo;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.controller.BaseController;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.pushMessage.webSocket.service.WebSocketUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -13,10 +16,12 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
 * WebSocket控制器
@@ -32,7 +37,11 @@
    @Autowired
    private WebSocketUserService webSocketUserService;
    @Autowired ObjectMapper om;
    @Autowired
    private ObjectMapper om;
    @Resource
    private RedisService redisService;
    // ==================== 基于XpAppUser的WebSocket接口 ====================
@@ -69,6 +78,8 @@
        }
    }
    @PostMapping("/base/websocket/order/sendStatusTest")
    public R<String> sendStatusTest(@RequestBody SendMessageDTO dto) {
        try {
@@ -104,7 +115,7 @@
     * @return 操作结果
     */
    @ApiOperation(value = "发送车辆路线、时间")
    @PostMapping("/inner/websocket/order/sendRoute")
    @PostMapping("/logan/inner/websocket/order/sendRoute")
    public R<String> sendRoute(@RequestBody SendMessageDTO dto) {
        try {
            String message = dto.getMessage();
@@ -378,4 +389,58 @@
    }
    /**
     * 推送订单修改目的地状态消息
     * @param vo
     * @return
     */
    @PostMapping("/logan/inner/websocket/order/sendUpdateEndAddStatus")
    public R<?> sendUpdateEndAddStatus(@RequestBody UpdateEndAddStatusVo vo){
        try {
            String message = vo.getMessage();
            if (message.trim().isEmpty()) {
                return R.fail("消息内容不能为空");
            }
            String appUserId = vo.getAppUserId().toString();
            if (appUserId.trim().isEmpty()) {
                return R.fail("用户id不能为空");
            }
            redisService.setCacheObject("UPDATE_END_ADDRESS_STATUS_MSG:" + vo, System.currentTimeMillis(), 5L, TimeUnit.SECONDS);
            int deviceCount = webSocketUserService.sendMessageToUser(appUserId, message);
            if (deviceCount > 0) {
                return R.ok("消息发送成功,发送到 " + deviceCount + " 个设备");
            } else {
                return R.fail("用户不在线或发送失败");
            }
        } catch (Exception e) {
            log.error("推送修改目的地状态消息失败", e);
            return R.fail("推送修改目的地状态消息失败: " + e.getMessage());
        }
    }
    /**
     * 推送优惠券消息
     * @param vo
     * @return
     */
    @PostMapping("/logan/inner/websocket/coupon/sendCouponMessage")
    public R<?> sendCouponMessage(@RequestBody SendCouponMessageVo vo){
        String message = vo.getMessage();
        if (message.trim().isEmpty()) {
            return R.fail("消息内容不能为空");
        }
        String appUserId = vo.getAppUserId().toString();
        if (appUserId.trim().isEmpty()) {
            return R.fail("用户id不能为空");
        }
        int deviceCount = webSocketUserService.sendMessageToUser(appUserId, message);
        if (deviceCount > 0) {
            return R.ok("消息发送成功,发送到 " + deviceCount + " 个设备");
        } else {
            return R.fail("用户不在线或发送失败");
        }
    }
}