新增第三张表

This commit is contained in:
quowingwang 2025-12-10 19:24:11 +08:00
parent d168724596
commit e6c0521bfe

View File

@ -44,12 +44,12 @@ namespace MQTT_WinformV1.Service
connStrBuilder.Database = strDBName;
connStrBuilder.CharacterSet = "utf8mb4";
sendconnectionString = connStrBuilder.ConnectionString;
var (firstMachineData, finalMachineData) = await GetTodayInspectionDataAsync(sendconnectionString);
int iResult = await InsertDataAsync(firstMachineData, finalMachineData, receiveconnectionString);
var (firstMachineData, finalMachineData, finalResultMachineData) = await GetTodayInspectionDataAsync(sendconnectionString);
int iResult = await InsertDataAsync(firstMachineData, finalMachineData, finalResultMachineData, receiveconnectionString);
if (iResult > 0)
{
//变更上传状态
await BatchUpdateTodayStatusAsync(sendconnectionString, firstMachineData, finalMachineData);
await BatchUpdateTodayStatusAsync(sendconnectionString, firstMachineData, finalMachineData,finalResultMachineData);
}
return iResult;
}
@ -131,7 +131,7 @@ namespace MQTT_WinformV1.Service
//}
#endregion
public async Task<int> BatchUpdateTodayStatusAsync(string connectionString, DataTable firstMachineData, DataTable finalMachineData)
public async Task<int> BatchUpdateTodayStatusAsync(string connectionString, DataTable firstMachineData, DataTable finalMachineData,DataTable finalResultMachineData)
{
// 新增定义批次大小MySQL IN子句建议不超过1000条这里设500
int totalUpdated = 0;
@ -172,6 +172,23 @@ namespace MQTT_WinformV1.Service
}
}
// 3. 处理第三张表的ID分批次
List<int> finalResultIds = new List<int>();
if (finalResultMachineData?.Rows.Count > 0)
{
foreach (DataRow dr in finalResultMachineData.Rows)
{
finalResultIds.Add(int.Parse(dr["Id"].ToString()));
}
// 新增:分批次更新第二张表
for (int i = 0; i < finalIds.Count; i += UpdateBatchSize)
{
int endIndex = Math.Min(i + UpdateBatchSize, finalIds.Count);
List<int> batchFinalIds = finalResultIds.GetRange(i, endIndex - i);
totalUpdated += await UpdateSingleTableBatchAsync(connectionString, "qc_final_inspection_result", batchFinalIds);
}
}
return totalUpdated;
}
@ -231,6 +248,7 @@ namespace MQTT_WinformV1.Service
private async Task<int> InsertDataAsync(
DataTable firstMachineData,
DataTable finalMachineData,
DataTable finalResultMachineData,
string receiveconnectionString)
{
int totalInserted = 0;
@ -267,6 +285,21 @@ namespace MQTT_WinformV1.Service
}
}
// 处理第三张表:分批次插入
if (finalResultMachineData?.Rows.Count > 0)
{
int finalResultTotal = finalResultMachineData.Rows.Count;
for (int i = 0; i < finalResultTotal; i += InsertBatchSize)
{
DataTable batchDt = finalResultMachineData.Clone();
int end = Math.Min(i + InsertBatchSize, finalResultTotal);
for (int j = i; j < end; j++)
{
batchDt.ImportRow(finalResultMachineData.Rows[j]);
}
totalInserted += await BatchInsertFinalResultMachineDataAsync(batchDt, receiveconnectionString);
}
}
return totalInserted;
}
@ -320,6 +353,25 @@ namespace MQTT_WinformV1.Service
return await BatchInsertAsync(connectionString, insertSql, data, MapFirstMachineParameters);
}
private async Task<int> BatchInsertFinalResultMachineDataAsync(
DataTable data,
string connectionString)
{
const string insertSql = @"
INSERT INTO qc_final_inspection_result
(
workorder, direction, qualified_quantity, unqualified_quantiy,
created_by, updated_by, created_time, updated_time
)
VALUES
(
@workorder, @direction, @qualified_quantity, @unqualified_quantiy,
@created_by, @updated_by, @created_time, @updated_time
)";
return await BatchInsertAsync(connectionString, insertSql, data, MapFinalResultMachineParameters);
}
private async Task<int> BatchInsertAsync(
string connectionString,
string sql,
@ -382,6 +434,17 @@ namespace MQTT_WinformV1.Service
cmd.Parameters.AddWithValue("@updated_time", DateTime.Now);
}
private void MapFinalResultMachineParameters(MySqlCommand cmd, DataRow row)
{
cmd.Parameters.AddWithValue("@workorder", row["workorder"]);
cmd.Parameters.AddWithValue("@direction", row["direction"]);
cmd.Parameters.AddWithValue("@qualified_quantity", Convert.ToInt32(row["qualified_quantity"]));
cmd.Parameters.AddWithValue("@unqualified_quantiy", Convert.ToInt32(row["unqualified_quantiy"]));
cmd.Parameters.AddWithValue("@created_by", row["created_by"]);
cmd.Parameters.AddWithValue("@updated_by", row["updated_by"]);
cmd.Parameters.AddWithValue("@created_time", DateTime.Now);
cmd.Parameters.AddWithValue("@updated_time", DateTime.Now);
}
private decimal ConvertToDecimal(object value)
{
@ -409,7 +472,7 @@ namespace MQTT_WinformV1.Service
// 提取公共方法
public async Task<(DataTable FirstMachine, DataTable FinalMachine)>
public async Task<(DataTable FirstMachine, DataTable FinalMachine,DataTable FinalResultMachine)>
GetTodayInspectionDataAsync(string connectionString)
{
// 获取今天的日期范围
@ -419,12 +482,13 @@ namespace MQTT_WinformV1.Service
var tasks = new[]
{
QueryInspectionDataAsync(connectionString, "qc_firstarticle_inspection", startTime, endTime),
QueryInspectionDataAsync(connectionString, "qc_final_inspection", startTime, endTime)
QueryInspectionDataAsync(connectionString, "qc_final_inspection", startTime, endTime),
QueryInspectionDataAsync(connectionString, "qc_final_inspection_result", startTime, endTime)
};
var results = await Task.WhenAll(tasks);
return (results[0], results[1]);
return (results[0], results[1], results[2]);
}
// 参数化查询方法