using F9WebAiTest.Application.Common; using F9WebAiTest.Application.Dtos.SYS.Reports; using F9WebAiTest.Domain.Entities.SYS.Reports; namespace F9WebAiTest.Application.Services.Reports; public interface IReportService { Task> GetPagedAsync(string like, string category, bool? isActive, int pageIndex, int pageSize); Task GetByIdAsync(long id); Task CreateAsync(ReportCreateDto dto); Task UpdateAsync(long id, ReportUpdateDto dto); Task DeleteAsync(long id); /// 上传 .grf 模板文件(f9designer:// 本机设计器协议回传用);常规保存走 Create/Update 的 templateJson Task UploadTemplateAsync(long id, byte[] data, string fileName); /// 直接保存模板文本(前端在线编辑模板源码用,免下载 / 上传),返回保存后的字符数 Task SaveTemplateContentAsync(long id, string content); /// 读取报表模板内容(ReportFile.DesignContent,.grf 的 JSON 文本);无模板返回 null Task GetTemplateContentAsync(Report report); /// 用户可见报表(按权限码过滤,admin 返回全部启用报表) Task> GetVisibleReportsAsync(long userId, bool isAdmin, IReadOnlyCollection permissions); /// 校验用户是否拥有某报表的查看权限(admin 视为通过) Task EnsureReportAccessAsync(long userId, bool isAdmin, IReadOnlyCollection permissions, long reportId); /// 执行报表数据查询 SQL,返回 Grid++Report 约定的 JSON 形态 Task> ExecuteDataAsync(Report report, IReadOnlyDictionary parameters); /// 列出所有启用的报表(角色管理-报表权限分配时使用) Task> GetAllActiveAsync(); /// 数据源清单(IReportDataProvider 注册表 + 各自声明的查询参数),新增报表自动配置用 Task> GetDataSourcesAsync(); /// 探测数据源结构:按 DsName / DataSql 执行一次查询,识别明细列与参数 Task ProbeAsync(ReportProbeRequestDto request); }