AdminDispatchRuleController.java 3.59 KB
package com.diligrp.rider.controller;

import com.diligrp.rider.common.exception.BizException;
import com.diligrp.rider.common.result.Result;
import com.diligrp.rider.dto.DispatchRuleTemplateSaveDTO;
import com.diligrp.rider.service.DispatchRuleService;
import com.diligrp.rider.vo.DispatchRuleTemplateVO;
import jakarta.servlet.http.HttpServletRequest;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/admin/dispatch/rule")
@RequiredArgsConstructor
public class AdminDispatchRuleController {

    private final DispatchRuleService dispatchRuleService;

    /** 获取城市当前生效规则 */
    @GetMapping("")
    public Result<DispatchRuleTemplateVO> getActiveRule(@RequestParam(required = false) Long cityId,
                                                        HttpServletRequest request) {
        return Result.success(dispatchRuleService.getActiveRule(resolveCityId(cityId, request)));
    }

    /** 获取城市所有模板列表 */
    @GetMapping("/list")
    public Result<List<DispatchRuleTemplateVO>> listTemplates(@RequestParam(required = false) Long cityId,
                                                              HttpServletRequest request) {
        return Result.success(dispatchRuleService.listTemplates(resolveCityId(cityId, request)));
    }

    /** 保存/更新模板(含条件列表) */
    @PostMapping("/save")
    public Result<Long> saveTemplate(@RequestBody DispatchRuleTemplateSaveDTO dto, HttpServletRequest request) {
        return Result.success(dispatchRuleService.saveTemplate(resolveCityId(dto != null ? dto.getCityId() : null, request), dto));
    }

    /** 激活模板 */
    @PostMapping("/activate")
    public Result<Void> activateTemplate(@RequestBody ActivateReq req,
                                         @RequestParam(required = false) Long cityId,
                                         HttpServletRequest request) {
        dispatchRuleService.activateTemplate(resolveCityId(cityId, request), req.getTemplateId());
        return Result.success();
    }

    /** 删除模板 */
    @DeleteMapping("/{id}")
    public Result<Void> deleteTemplate(@PathVariable Long id,
                                       @RequestParam(required = false) Long cityId,
                                       HttpServletRequest request) {
        dispatchRuleService.deleteTemplate(resolveCityId(cityId, request), id);
        return Result.success();
    }

    /** 复制模板 */
    @PostMapping("/copy")
    public Result<Long> copyTemplate(@RequestBody CopyReq req,
                                     @RequestParam(required = false) Long cityId,
                                     HttpServletRequest request) {
        return Result.success(dispatchRuleService.copyTemplate(resolveCityId(cityId, request), req.getTemplateId(), req.getNewName()));
    }

    private Long resolveCityId(Long cityId, HttpServletRequest request) {
        if ("substation".equals(request.getAttribute("role"))) {
            Long requestCityId = (Long) request.getAttribute("cityId");
            if (requestCityId == null || requestCityId < 1) {
                throw new BizException("当前账号未绑定城市");
            }
            return requestCityId;
        }
        if (cityId == null || cityId < 1) {
            throw new BizException("城市不能为空");
        }
        return cityId;
    }

    @Data
    static class ActivateReq {
        private Long templateId;
    }

    @Data
    static class CopyReq {
        private Long templateId;
        private String newName;
    }
}