package com.battery.business.web; import com.battery.business.report.CompareReportRepository; import com.battery.business.report.CompareReportService; import com.battery.business.report.CompareReportRequest; import com.battery.business.report.CompareReportEditRequest; import jakarta.validation.Valid; import java.util.List; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; /** 对比报表按正式动作授权,创建人不限制报表可见范围。 */ @RestController @RequestMapping("/system/compare-report") public class CompareReportController extends BaseController { private final CompareReportRepository reports; private final CompareReportService service; public CompareReportController(CompareReportRepository reports, CompareReportService service) { this.reports = reports; this.service = service; } /** 查询报表摘要;筛选与分页沿用现有列表交互。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:query')") @GetMapping("/list") public AjaxResult list() { return success().put("rows", reports.list()); } /** 新建页查询可选真实来源。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:add')") @GetMapping("/sources") public AjaxResult sources() { return success(service.sources()); } /** 预览范围由后端验证并读取,不接收浏览器测量事实。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:add')") @PostMapping("/preview") public AjaxResult preview(@RequestBody List selections) { return success(service.preview(selections)); } /** 首次保存报表及独立版本。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:add')") @PostMapping public AjaxResult create(@Valid @RequestBody CompareReportRequest request) { return success(service.create(request, getUserId(), getUsername())); } /** 读取已保存版本,不检查来源测试是否仍存在。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:query')") @GetMapping("/{id}") public AjaxResult get(@PathVariable long id) { return success(service.get(id)); } /** 授权查看全部历史版本摘要,不限制创建人。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:query')") @GetMapping("/{id}/versions") public AjaxResult history(@PathVariable long id) { return success(reports.history(id)); } /** 指定历史版本只读,不依赖来源仍存在。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:query')") @GetMapping("/{id}/versions/{versionNo}") public AjaxResult version(@PathVariable long id, @PathVariable int versionNo) { return success(service.get(id, versionNo)); } /** 编辑权限可读取最新快照作为基准,无需来源测试权限。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:edit')") @GetMapping("/{id}/editing") public AjaxResult editing(@PathVariable long id) { return success(service.get(id)); } /** 普通编辑只追加新版本,拒绝调用方提供测量事实。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:edit')") @PostMapping("/{id}/versions") public AjaxResult edit(@PathVariable long id, @Valid @RequestBody CompareReportEditRequest request) { return success(service.edit(id, request, getUserId(), getUsername())); } /** 独立动作重读当前来源并追加快照,失败由业务事务完整回滚。 */ @PreAuthorize("@ss.hasPermi('system:compare-report:edit')") @PostMapping("/{id}/refresh-source") public AjaxResult refresh(@PathVariable long id, @Valid @RequestBody CompareReportEditRequest.Refresh request) { return success(service.refresh(id, request, getUserId(), getUsername())); } }