Skip to content

Commit 194cc65

Browse files
pythonHuangclaude
andcommitted
fix: 报表预览SQL语法错误-自定义SQL数据集执行时忽略数据集保存的dataSourceId导致错误的数据源执行(如SQLServer语法的SQL跑在PG上报42601),改为优先用数据集自带数据源执行+兼容旧数据回退
Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent e02bf6c commit 194cc65

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

‎Juggle.Application/Services/Impl/ReportExecutionService.cs‎

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,16 @@ public async Task<string> RenderToHtml(string layoutJson, Dictionary<string, obj
9898
var sourceType = ds.TryGetProperty("sourceType", out var stEl) ? stEl.GetString() ?? "" : "";
9999
var sourceRef = ds.TryGetProperty("sourceRef", out var srEl) ? srEl.GetString() ?? "" : "";
100100
var customSql = ds.TryGetProperty("customSql", out var csEl) ? csEl.GetString() ?? "" : "";
101+
var dataSourceId = ds.TryGetProperty("dataSourceId", out var dsi)
102+
? dsi.ValueKind switch
103+
{
104+
JsonValueKind.Number => dsi.GetInt64(),
105+
JsonValueKind.String when long.TryParse(dsi.GetString(), out var v) => v,
106+
_ => 0
107+
}
108+
: 0;
101109

102-
var dt = await ResolveSource(sourceType, sourceRef, customSql, queryParams);
110+
var dt = await ResolveSource(sourceType, sourceRef, customSql, dataSourceId, queryParams);
103111
if (dt != null) datasets[id] = dt;
104112
}
105113
}
@@ -333,7 +341,7 @@ public byte[] ExportPdf(string layoutJson, Dictionary<string, object?>? queryPar
333341
// ===== Data Source Helpers =====
334342

335343
private async Task<DataTable?> ResolveSource(string sourceType, string sourceRef, string customSql,
336-
Dictionary<string, object?>? queryParams)
344+
long dataSourceId, Dictionary<string, object?>? queryParams)
337345
{
338346
switch (sourceType)
339347
{
@@ -348,10 +356,12 @@ public byte[] ExportPdf(string layoutJson, Dictionary<string, object?>? queryPar
348356
case "sql":
349357
if (!string.IsNullOrEmpty(customSql))
350358
{
351-
// 使用第一个数据源执行自定义SQL
352-
var firstDs = await _db.DataSources.FirstOrDefaultAsync(d => d.Deleted == 0);
353-
if (firstDs != null)
354-
return await ExecuteQuery(firstDs.Id, customSql, queryParams);
359+
// 优先使用数据集保存的数据源;旧数据未保存 dataSourceId 时回退到第一个数据源
360+
var dsEntity = dataSourceId > 0
361+
? await _db.DataSources.FirstOrDefaultAsync(d => d.Deleted == 0 && d.Id == dataSourceId)
362+
: await _db.DataSources.FirstOrDefaultAsync(d => d.Deleted == 0);
363+
if (dsEntity != null)
364+
return await ExecuteQuery(dsEntity.Id, customSql, queryParams);
355365
}
356366
break;
357367
}

0 commit comments

Comments
 (0)