diff --git a/MQTT-WinformV1/Service/DataUploadService.cs b/MQTT-WinformV1/Service/DataUploadService.cs index a8430d8..be1cb98 100644 --- a/MQTT-WinformV1/Service/DataUploadService.cs +++ b/MQTT-WinformV1/Service/DataUploadService.cs @@ -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 BatchUpdateTodayStatusAsync(string connectionString, DataTable firstMachineData, DataTable finalMachineData) + public async Task 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 finalResultIds = new List(); + 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 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 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 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 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]); } // 参数化查询方法