AdminMessageController.java 2.85 KB
package com.diligrp.rider.controller;

import com.diligrp.rider.common.result.Result;
import com.diligrp.rider.entity.RiderMessageTemplate;
import com.diligrp.rider.service.AdminMessageService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 管理端消息接口
 */
@RestController
@RequestMapping("/api/admin/message")
@RequiredArgsConstructor
public class AdminMessageController {

    private final AdminMessageService messageService;

    @Data
    static class MessageSendDTO {
        private Long riderId;
        private Integer type;
        private String title;
        private String content;
        private String bizType;
        private Long bizId;
    }

    @Data
    static class MessageBroadcastDTO {
        private Integer type;
        private String title;
        private String content;
    }

    /**
     * 发送消息给指定骑手
     */
    @PostMapping("/send")
    public Result<Void> send(@RequestBody MessageSendDTO dto, HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        messageService.sendToRider(cityId, dto.getRiderId(), dto.getType(), dto.getTitle(), dto.getContent(), dto.getBizType(), dto.getBizId());
        return Result.success();
    }

    /**
     * 群发消息(城市内所有骑手)
     */
    @PostMapping("/broadcast")
    public Result<Void> broadcast(@RequestBody MessageBroadcastDTO dto, HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        messageService.broadcastToCity(cityId, dto.getType(), dto.getTitle(), dto.getContent());
        return Result.success();
    }

    /**
     * 查询消息列表(管理端)
     */
    @GetMapping("/list")
    public Result<Map<String, Object>> list(
            @RequestParam(required = false) Long riderId,
            @RequestParam(required = false) Integer type,
            @RequestParam(defaultValue = "1") Integer page,
            HttpServletRequest request) {
        Long cityId = resolveCityId(request);
        return Result.success(messageService.listMessages(cityId, riderId, type, page));
    }

    /**
     * 获取模板列表
     */
    @GetMapping("/templates")
    public Result<List<RiderMessageTemplate>> templates() {
        return Result.success(messageService.listTemplates());
    }

    /**
     * 解析城市ID(分站管理员自动绑定本城市,超管需要传递)
     */
    private Long resolveCityId(HttpServletRequest request) {
        if ("substation".equals(request.getAttribute("role"))) {
            return (Long) request.getAttribute("cityId");
        }
        // 超管需要从请求参数获取 cityId(这里简化处理,实际应该从请求参数获取)
        return (Long) request.getAttribute("cityId");
    }
}