修改测试查询的界面部分逻辑,修复bug
This commit is contained in:
@@ -113,6 +113,7 @@ namespace WebAPIServer.Controllers
|
||||
entity = q.TblUtsManageUsers.SingleOrDefault(A => A.UserName.Equals(username) && A.Password.Equals(pwd));
|
||||
if (entity != null)
|
||||
{
|
||||
var auths = q.TblUtsManageUserauthOperations.Where(A => A.UserId == entity.Id).ToList();
|
||||
TokenString = GetToken(entity);
|
||||
res.isok = true;
|
||||
|
||||
@@ -123,6 +124,7 @@ namespace WebAPIServer.Controllers
|
||||
r.IsAdmin = entity.IsAdmin;
|
||||
r.ID = entity.Id;
|
||||
r.UserName = entity.UserName;
|
||||
r.Auths = auths;
|
||||
res.response = r;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -197,7 +197,8 @@ namespace WebAPIServer.Controllers
|
||||
IDbCommand dataCmd = conn.CreateCommand();
|
||||
dataCmd.CommandText = dataQuery.ToString();
|
||||
|
||||
MySqlCommand command = dataCmd as MySqlCommand;
|
||||
var command = dataCmd as MySqlCommand
|
||||
?? throw new InvalidOperationException("Database command is not MySqlCommand");
|
||||
MySqlDataAdapter adapter = new(command);
|
||||
DataSet ds = new();
|
||||
adapter.Fill(ds);
|
||||
@@ -239,11 +240,57 @@ namespace WebAPIServer.Controllers
|
||||
string? EndTime = T.EndTime;
|
||||
string? TestResult = T.TestResult;
|
||||
List<string>? FailSteps = T.FailSteps;
|
||||
string? dutSnLike = T.DutSnLike;
|
||||
string? failstepsLike = T.FailstepsLike;
|
||||
string? ColumnList = T.ColumnList;
|
||||
int page = T.Page;
|
||||
int pageSize = T.PageSize;
|
||||
string distinctType = T.DistinctType ?? "None"; // 获取去重类型,默认为不去重
|
||||
|
||||
static List<string> SplitCommaTokens(string? input)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(input))
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
return input
|
||||
.Split(',', StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(s => s.Trim())
|
||||
.Where(s => !string.IsNullOrWhiteSpace(s))
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
static void AppendLikeOrClause(StringBuilder sb, IDbCommand cmd, string fieldName, string paramPrefix, List<string> tokens)
|
||||
{
|
||||
if (tokens == null || tokens.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
sb.Append("AND (");
|
||||
for (int i = 0; i < tokens.Count; i++)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
sb.Append(" OR ");
|
||||
}
|
||||
|
||||
string paramName = $"@{paramPrefix}{i}";
|
||||
sb.Append($"{fieldName} LIKE {paramName} ");
|
||||
|
||||
var p = cmd.CreateParameter();
|
||||
p.ParameterName = paramName;
|
||||
p.Value = $"%{tokens[i]}%";
|
||||
cmd.Parameters.Add(p);
|
||||
}
|
||||
sb.Append(") ");
|
||||
}
|
||||
|
||||
var dutSnTokens = SplitCommaTokens(dutSnLike);
|
||||
var failstepsTokens = SplitCommaTokens(failstepsLike);
|
||||
|
||||
if (string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndTime))
|
||||
{
|
||||
returnInfo.isok = false;
|
||||
@@ -265,6 +312,8 @@ namespace WebAPIServer.Controllers
|
||||
// 1. 构建基础查询(总数查询)
|
||||
StringBuilder baseQuery = new StringBuilder();
|
||||
|
||||
IDbCommand countCmd = conn.CreateCommand();
|
||||
|
||||
if (distinctType == "None")
|
||||
{
|
||||
// 不去重的情况
|
||||
@@ -290,8 +339,10 @@ namespace WebAPIServer.Controllers
|
||||
baseQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
AppendLikeOrClause(baseQuery, countCmd, "DUT_SN", "sn", dutSnTokens);
|
||||
AppendLikeOrClause(baseQuery, countCmd, "Failsteps", "fs", failstepsTokens);
|
||||
|
||||
// 执行总数查询
|
||||
IDbCommand countCmd = conn.CreateCommand();
|
||||
countCmd.CommandText = baseQuery.ToString();
|
||||
long totalCount = Convert.ToInt64(countCmd.ExecuteScalar());
|
||||
|
||||
@@ -299,6 +350,8 @@ namespace WebAPIServer.Controllers
|
||||
long totalPassCount = 0;
|
||||
StringBuilder totalPassQuery = new StringBuilder();
|
||||
|
||||
IDbCommand totalPassCmd = conn.CreateCommand();
|
||||
|
||||
if (distinctType == "None")
|
||||
{
|
||||
// 不去重的情况:统计所有通过的记录
|
||||
@@ -317,6 +370,9 @@ namespace WebAPIServer.Controllers
|
||||
string failStepsCondition = string.Join(",", FailSteps.Select(f => $"'{MySqlHelper.EscapeString(f)}'"));
|
||||
totalPassQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
AppendLikeOrClause(totalPassQuery, totalPassCmd, "DUT_SN", "sn", dutSnTokens);
|
||||
AppendLikeOrClause(totalPassQuery, totalPassCmd, "Failsteps", "fs", failstepsTokens);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -340,10 +396,11 @@ namespace WebAPIServer.Controllers
|
||||
totalPassQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
AppendLikeOrClause(totalPassQuery, totalPassCmd, "DUT_SN", "sn", dutSnTokens);
|
||||
AppendLikeOrClause(totalPassQuery, totalPassCmd, "Failsteps", "fs", failstepsTokens);
|
||||
|
||||
totalPassQuery.Append($") as t WHERE rn = 1 AND TestResult = '1'");
|
||||
}
|
||||
|
||||
IDbCommand totalPassCmd = conn.CreateCommand();
|
||||
totalPassCmd.CommandText = totalPassQuery.ToString();
|
||||
totalPassCount = Convert.ToInt64(totalPassCmd.ExecuteScalar());
|
||||
|
||||
@@ -352,6 +409,8 @@ namespace WebAPIServer.Controllers
|
||||
// 4. 构建数据查询
|
||||
StringBuilder dataQuery = new StringBuilder();
|
||||
|
||||
IDbCommand dataCmd = conn.CreateCommand();
|
||||
|
||||
if (distinctType == "None")
|
||||
{
|
||||
// 不去重的情况
|
||||
@@ -395,6 +454,9 @@ namespace WebAPIServer.Controllers
|
||||
dataQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
AppendLikeOrClause(dataQuery, dataCmd, "DUT_SN", "sn", dutSnTokens);
|
||||
AppendLikeOrClause(dataQuery, dataCmd, "Failsteps", "fs", failstepsTokens);
|
||||
|
||||
dataQuery.Append(") t WHERE rn = 1 ");
|
||||
}
|
||||
|
||||
@@ -412,16 +474,19 @@ namespace WebAPIServer.Controllers
|
||||
string failStepsCondition = string.Join(",", FailSteps.Select(f => $"'{MySqlHelper.EscapeString(f)}'"));
|
||||
dataQuery.Append($"AND Failsteps IN ({failStepsCondition}) ");
|
||||
}
|
||||
|
||||
AppendLikeOrClause(dataQuery, dataCmd, "DUT_SN", "sn", dutSnTokens);
|
||||
AppendLikeOrClause(dataQuery, dataCmd, "Failsteps", "fs", failstepsTokens);
|
||||
}
|
||||
|
||||
// 添加排序和分页
|
||||
dataQuery.Append($"ORDER BY StartTime DESC LIMIT {pageSize} OFFSET {(page - 1) * pageSize}");
|
||||
|
||||
// 执行数据查询
|
||||
IDbCommand dataCmd = conn.CreateCommand();
|
||||
dataCmd.CommandText = dataQuery.ToString();
|
||||
|
||||
MySqlCommand command = dataCmd as MySqlCommand;
|
||||
var command = dataCmd as MySqlCommand
|
||||
?? throw new InvalidOperationException("Database command is not MySqlCommand");
|
||||
MySqlDataAdapter adapter = new(command);
|
||||
DataSet ds = new();
|
||||
adapter.Fill(ds);
|
||||
@@ -461,10 +526,12 @@ namespace WebAPIServer.Controllers
|
||||
{
|
||||
public string? dbName { get; set; }
|
||||
public string? tbName { get; set; }
|
||||
public string StartTime { get; set; }
|
||||
public string EndTime { get; set; }
|
||||
public string StartTime { get; set; } = string.Empty;
|
||||
public string EndTime { get; set; } = string.Empty;
|
||||
public string? TestResult { get; set; }
|
||||
public List<string>? FailSteps { get; set; }
|
||||
public string? DutSnLike { get; set; }
|
||||
public string? FailstepsLike { get; set; }
|
||||
public string? ColumnList { get; set; }
|
||||
public string DistinctType { get; set; } = "None"; // 新增字段:None-不去重, Latest-保留最新, Earliest-保留最早
|
||||
}
|
||||
@@ -472,27 +539,27 @@ namespace WebAPIServer.Controllers
|
||||
public class ReturnTestLogs
|
||||
{
|
||||
|
||||
public string Step { get; set; }
|
||||
public string ID { get; set; }
|
||||
public string StartTime { get; set; }
|
||||
public string UsedTime { get; set; }
|
||||
public string FailSteps { get; set; }
|
||||
public string FailMsg { get; set; }
|
||||
public string TestResult { get; set; }
|
||||
public List<Dictionary<string, string>> RObj { get; set; }
|
||||
public string Step { get; set; } = string.Empty;
|
||||
public string ID { get; set; } = string.Empty;
|
||||
public string StartTime { get; set; } = string.Empty;
|
||||
public string UsedTime { get; set; } = string.Empty;
|
||||
public string FailSteps { get; set; } = string.Empty;
|
||||
public string FailMsg { get; set; } = string.Empty;
|
||||
public string TestResult { get; set; } = string.Empty;
|
||||
public List<Dictionary<string, string>> RObj { get; set; } = new();
|
||||
}
|
||||
|
||||
public class TestLogsQueryModel
|
||||
{
|
||||
public string DBName { get; set; }
|
||||
public string SnCode { get; set; }
|
||||
public string DBName { get; set; } = string.Empty;
|
||||
public string SnCode { get; set; } = string.Empty;
|
||||
|
||||
public List<DBL> DbList { get; set; }
|
||||
public List<DBL> DbList { get; set; } = new();
|
||||
}
|
||||
public class DBL
|
||||
{
|
||||
public string ProId { get; set; }
|
||||
public string Step { get; set; }
|
||||
public string ProId { get; set; } = string.Empty;
|
||||
public string Step { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
|
||||
@@ -506,9 +573,9 @@ namespace WebAPIServer.Controllers
|
||||
public class ReturnInfoPage
|
||||
{
|
||||
public bool isok { get; set; }
|
||||
public string message { get; set; }
|
||||
public string? message { get; set; }
|
||||
public long total { get; set; }
|
||||
public object response { get; set; }
|
||||
public object? response { get; set; }
|
||||
public long passCount { get; set; }
|
||||
public double passRate { get; set; }
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<_PublishTargetUrl>E:\Project\AUTS_New\WebAPIServer\bin\Release\net8.0\publish\</_PublishTargetUrl>
|
||||
<History>True|2025-08-28T09:10:06.0215159Z||;True|2025-08-27T20:08:53.7448405+08:00||;True|2025-08-27T09:30:37.1012354+08:00||;True|2025-08-19T18:15:37.7913274+08:00||;True|2025-08-19T17:20:58.7412452+08:00||;True|2025-08-19T15:55:20.9527200+08:00||;True|2025-04-07T19:28:10.1279229+08:00||;True|2025-03-31T11:42:19.8860538+08:00||;True|2025-03-29T17:38:19.1679458+08:00||;True|2025-03-28T19:10:51.5374819+08:00||;True|2025-03-28T17:57:42.2820238+08:00||;True|2025-03-21T17:12:53.2430355+08:00||;False|2025-03-21T17:12:26.4177469+08:00||;True|2025-03-18T15:58:56.0927860+08:00||;True|2025-03-18T15:57:00.4917451+08:00||;True|2025-03-18T15:55:00.3530973+08:00||;</History>
|
||||
<_PublishTargetUrl>E:\Project_Class\ATUS\Web_AUTS_New_Prod\WebAPIServer\bin\Release\net8.0\publish\</_PublishTargetUrl>
|
||||
<History>True|2026-01-10T03:51:47.0554512Z||;True|2025-12-22T14:34:59.4524330+08:00||;True|2025-08-28T17:10:06.0215159+08:00||;True|2025-08-27T20:08:53.7448405+08:00||;True|2025-08-27T09:30:37.1012354+08:00||;True|2025-08-19T18:15:37.7913274+08:00||;True|2025-08-19T17:20:58.7412452+08:00||;True|2025-08-19T15:55:20.9527200+08:00||;True|2025-04-07T19:28:10.1279229+08:00||;True|2025-03-31T11:42:19.8860538+08:00||;True|2025-03-29T17:38:19.1679458+08:00||;True|2025-03-28T19:10:51.5374819+08:00||;True|2025-03-28T17:57:42.2820238+08:00||;True|2025-03-21T17:12:53.2430355+08:00||;False|2025-03-21T17:12:26.4177469+08:00||;True|2025-03-18T15:58:56.0927860+08:00||;True|2025-03-18T15:57:00.4917451+08:00||;True|2025-03-18T15:55:00.3530973+08:00||;</History>
|
||||
<LastFailureDetails />
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
Reference in New Issue
Block a user