package com.battery.business.web; import java.util.List; import com.battery.business.report.*; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; /** 拼接报表正式 API,所有来源与统计由后端校验并冻结。 */ @RestController @RequestMapping("/system/splice-report") public class SpliceReportController extends BaseController { private final SpliceReportService service; private final SpliceReportRepository reports; public SpliceReportController(SpliceReportService s,SpliceReportRepository r){service=s;reports=r;} /** 按新增权限读取检测完成测试的参与电池候选。 */ @GetMapping("/sources") @PreAuthorize("@ss.hasPermi('system:splice-report:add')") public AjaxResult sources(){return success(service.sources());} /** 校验共同电池并预览当前有效统计,不保存报表。 */ @PostMapping("/preview") @PreAuthorize("@ss.hasPermi('system:splice-report:add')") public AjaxResult preview(@RequestBody List s){return success(service.preview(s));} /** 返回可协作查看的拼接报表列表,不按创建人限制。 */ @GetMapping("/list") @PreAuthorize("@ss.hasPermi('system:splice-report:query')") public AjaxResult list(){return success().put("rows",reports.list());} /** 冻结正式来源为首版,创建身份取当前登录人。 */ @PostMapping @PreAuthorize("@ss.hasPermi('system:splice-report:add')") public AjaxResult create(@Valid @RequestBody SpliceReportRequest r){return success(service.create(r,getUserId(),getUsername()));} /** 按查看权限读取最新保存版本,来源删除不影响重开。 */ @GetMapping("/{id}") @PreAuthorize("@ss.hasPermi('system:splice-report:query')") public AjaxResult get(@PathVariable long id){return success(service.get(id,null));} /** 按编辑权限读取版本基准,不额外要求查看权限。 */ @GetMapping("/{id}/editing") @PreAuthorize("@ss.hasPermi('system:splice-report:edit')") public AjaxResult editing(@PathVariable long id){return success(service.get(id,null));} /** 返回独立版本历史,不重新读取来源测试。 */ @GetMapping("/{id}/versions") @PreAuthorize("@ss.hasPermi('system:splice-report:query')") public AjaxResult history(@PathVariable long id){return success(reports.history(id));} /** 读取指定冻结版本,保留当时的字段和计算原值。 */ @GetMapping("/{id}/versions/{version}") @PreAuthorize("@ss.hasPermi('system:splice-report:query')") public AjaxResult version(@PathVariable long id,@PathVariable int version){return success(service.get(id,version));} /** 仅按导出权限读取指定冻结版本;来源测试删除后仍可打印,不登记下载结果。 */ @GetMapping("/{id}/versions/{version}/print") @PreAuthorize("@ss.hasPermi('system:splice-report:export')") public AjaxResult print(@PathVariable long id,@PathVariable int version){return success(service.get(id,version));} /** 基于当前版本追加普通编辑,陈旧基准由业务层拒绝。 */ @PostMapping("/{id}/versions") @PreAuthorize("@ss.hasPermi('system:splice-report:edit')") public AjaxResult edit(@PathVariable long id,@Valid @RequestBody SpliceReportRequest.Edit r){return success(service.edit(id,r,getUserId(),getUsername()));} /** 显式重取来源形成新版本,来源失效时不产生部分更新。 */ @PostMapping("/{id}/refresh-source") @PreAuthorize("@ss.hasPermi('system:splice-report:edit')") public AjaxResult refresh(@PathVariable long id,@RequestBody java.util.Map body){return success(service.refresh(id,((Number)body.get("baseVersionNo")).intValue(),String.valueOf(body.getOrDefault("changeSummary","")),getUserId(),getUsername()));} /** 事务删除整份报表并记录当前操作人,不删除源测试。 */ @DeleteMapping("/{id}") @PreAuthorize("@ss.hasPermi('system:splice-report:remove')") public AjaxResult delete(@PathVariable long id){service.delete(id,getUserId(),getUsername());return success();} }