RiderExtController.java 4.11 KB
package com.diligrp.rider.controller;

import com.diligrp.rider.common.result.Result;
import com.diligrp.rider.service.RiderEvaluateService;
import com.diligrp.rider.service.RiderOrderService;
import com.diligrp.rider.service.RefundService;
import com.diligrp.rider.entity.OrderRefundReason;
import com.diligrp.rider.vo.RiderMonthCountVO;
import com.diligrp.rider.vo.RiderTodayCountVO;
import com.diligrp.rider.vo.OrderVO;
import jakarta.servlet.http.HttpServletRequest;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 骑手端扩展接口:转单/退款/评价/统计
 */
@RestController
@RequestMapping("/api/rider")
@RequiredArgsConstructor
public class RiderExtController {

    private final RiderOrderService orderService;
    private final RiderEvaluateService evaluateService;
    private final RefundService refundService;

    @Data
    static class OrderIdReq { private Long orderId; }
    @Data
    static class RefundReq {
        private Long orderId;
        private Long reasonId = 0L;
        private String reason = "";
    }

    // ---- 转单 ----

    /** 骑手申请转单(仅 status=3 可申请) */
    @PostMapping("/order/applyTrans")
    public Result<Void> applyTrans(@RequestBody OrderIdReq req, HttpServletRequest request) {
        Long riderId = (Long) request.getAttribute("riderId");
        orderService.applyTrans(riderId, req.getOrderId());
        return Result.success();
    }

    // ---- 统计 ----

    /** 今日统计 */
    @GetMapping("/order/count/today")
    public Result<RiderTodayCountVO> todayCount(HttpServletRequest request) {
        Long riderId = (Long) request.getAttribute("riderId");
        return Result.success(orderService.getTodayCount(riderId));
    }

    /** 月度统计(year=0表示本年) */
    @GetMapping("/order/count/month")
    public Result<List<RiderMonthCountVO>> monthCount(
            @RequestParam(defaultValue = "0") int year,
            HttpServletRequest request) {
        Long riderId = (Long) request.getAttribute("riderId");
        return Result.success(orderService.getMonthCount(riderId, year));
    }

    /**
     * 骑手历史订单明细列表
     * type=0全部 1已完成 2已转单
     */
    @GetMapping("/order/count/list")
    public Result<List<OrderVO>> countList(
            @RequestParam(defaultValue = "0") int type,
            @RequestParam(defaultValue = "1") int page,
            HttpServletRequest request) {
        Long riderId = (Long) request.getAttribute("riderId");
        return Result.success(orderService.getCountList(riderId, type, page));
    }

    // ---- 退款 ----

    /** 退款原因列表(role=2骑手) */
    @GetMapping("/order/refund/reasons")
    public Result<List<OrderRefundReason>> refundReasons() {
        return Result.success(refundService.getReasons(2));
    }

    /** 骑手申请退款 */
    @PostMapping("/order/refund/apply")
    public Result<Void> applyRefund(@RequestBody RefundReq req, HttpServletRequest request) {
        Long riderId = (Long) request.getAttribute("riderId");
        Long reasonId = req.getReasonId() != null ? req.getReasonId() : 0L;
        String reason = req.getReason() != null ? req.getReason() : "";
        refundService.applyRefund(req.getOrderId(), riderId, 2, reasonId, reason);
        return Result.success();
    }

    // ---- 评价 ----

    /** 骑手查看自己的评价列表(type=1好评 2中评 3差评 0全部) */
    @GetMapping("/evaluate/list")
    public Result<List<?>> evaluateList(
            @RequestParam(defaultValue = "0") int type,
            @RequestParam(defaultValue = "1") int page,
            HttpServletRequest request) {
        Long riderId = (Long) request.getAttribute("riderId");
        return Result.success(evaluateService.getRiderEvaluates(riderId, type, page));
    }

    /** 本月好评数 */
    @GetMapping("/evaluate/month/good")
    public Result<Integer> monthGoodCount(HttpServletRequest request) {
        Long riderId = (Long) request.getAttribute("riderId");
        return Result.success(evaluateService.getMonthGoodCount(riderId));
    }
}