diff --git a/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs b/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs index 397557b..f727f32 100644 --- a/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs +++ b/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs @@ -1,8 +1,4 @@ -using System.Data; -using System.Linq.Expressions; -using System.Text.Json; -using System.Text.Json.Serialization; -using Magicodes.ExporterAndImporter.Core.Extension; +using Magicodes.ExporterAndImporter.Core.Extension; using Magicodes.ExporterAndImporter.Excel; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -11,11 +7,17 @@ using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; using Omu.ValueInjecter; +using System.Data; +using System.Data.Common; +using System.Linq.Expressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; using TaskManager.Contracts.Dtos; using TaskManager.Controllers; - using TaskManager.Entity; using TaskManager.EntityFramework; using TaskManager.EntityFramework.Repository; @@ -31,10 +33,34 @@ namespace TaskManager.Controllers { _repository = repository; } - protected virtual async Task CreateTaskAsync(List plist,JobDbContext dbContext) + protected virtual async Task ConfirmDataInsertAsync(List plist,JobDbContext dbContext, DbTransaction dbTransaction) { + } + private async Task InsertDataAsync(List list) + { + if (list.Any()) + { + using (var transaction = await _jobDbContext.Database.BeginTransactionAsync()) + { + var tran = transaction.GetDbTransaction(); + try + { + _jobDbContext.BulkInsert(list); + await ConfirmDataInsertAsync(list, _jobDbContext, tran); + + // 提交事务 + await transaction.CommitAsync(); + } + catch (Exception ex) + { + await transaction.RollbackAsync(); + new JsonResult(new { Code = 400, Message = ex.Message }); + } + } + } + } [NonAction] public async Task> FetchAllDataAsync(string inputdate) @@ -57,11 +83,11 @@ namespace TaskManager.Controllers } if (firstResponse.Data.Total == "0") { - await _logger.AddError("首次请求失败,Total为0是否已经全部读取过。", TaskName); + await _logger.AddInfo("首次请求失败,Total为0是否已经全部读取过。", TaskName); return allData; } - + if (readedcount != int.Parse(firstResponse.Data.Total))//记录数不相等 { var ids = _jobDbContext.Set().Where(p => p.RequestDate == inputdate).Select(p => p.Id).ToList();//已经同步的ID @@ -93,8 +119,10 @@ namespace TaskManager.Controllers } } - _jobDbContext.BulkInsert(pagefirstList); - await CreateTaskAsync(pagefirstList,_jobDbContext); + if (pagefirstList.Any()) + { + await InsertDataAsync(pagefirstList); + } // 计算总页数 @@ -110,7 +138,6 @@ namespace TaskManager.Controllers if (pageResponse?.Data.Rows != null && pageResponse.Data.Rows.Count > 0) { List pageList = new List(); - if (readedcount > 0) { var listrows = pageResponse.Data.Rows.Where(p => !ids.Contains(p.Id)); @@ -121,12 +148,10 @@ namespace TaskManager.Controllers entity.CreationTime = DateTime.Now; pageList.Add(entity); allData.Add(itm); - } } else { - foreach (var itm in pageResponse.Data.Rows) { T entity = new T(); @@ -136,25 +161,22 @@ namespace TaskManager.Controllers allData.Add(itm); } } - - _jobDbContext.BulkInsert(pageList); - await CreateTaskAsync(pageList, _jobDbContext); - await _logger.AddInfo($"成功获取 {pageResponse.Data.Rows.Count} 条记录", TaskName); + if (pageList.Any()) + { + await InsertDataAsync(pageList); + } } else { - await _logger.AddError($"第 {currentPage} 页未返回数据", TaskName); + await _logger.AddInfo($"第 {currentPage} 页未返回数据", TaskName); } // 简单的请求间隔,避免过于频繁 await Task.Delay(200); } - - await _logger.AddInfo($"所有数据获取完成,总共获取了 {allData.Count} 条记录", TaskName); } - } else { @@ -191,7 +213,6 @@ namespace TaskManager.Controllers } else { - foreach (var itm in firstResponse.Data.Rows) { T entity = new T(); @@ -201,8 +222,10 @@ namespace TaskManager.Controllers allData.Add(itm); } } - _jobDbContext.BulkInsert(pagefirstList); - await CreateTaskAsync(pagefirstList, _jobDbContext); + if (pagefirstList.Any()) + { + await InsertDataAsync(pagefirstList); + } //Console.WriteLine($"总记录数: {totalItems}, 每页大小: {pageSize}"); // 计算总页数 int totalPages = (int)Math.Ceiling((double)totalItems / pageSize); @@ -231,7 +254,6 @@ namespace TaskManager.Controllers } else { - foreach (var itm in pageResponse.Data.Rows) { T entity = new T(); @@ -241,9 +263,12 @@ namespace TaskManager.Controllers allData.Add(itm); } } - _jobDbContext.BulkInsert(pageList); - await CreateTaskAsync(pageList, _jobDbContext); - await _logger.AddInfo($"成功获取 {pageResponse.Data.Rows.Count} 条记录", TaskName); + if (pageList.Any()) + { + await InsertDataAsync(pageList); + } + + //await _logger.AddInfo($"成功获取 {pageResponse.Data.Rows.Count} 条记录", TaskName); } else { @@ -256,11 +281,8 @@ namespace TaskManager.Controllers } } - // 首次请求获取总条数和分页信息 - - return allData; } diff --git a/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs b/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs index 7daf384..b34f612 100644 --- a/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs +++ b/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs @@ -1,4 +1,5 @@ using Magicodes.ExporterAndImporter.Core; +using System.Data.Common; using TaskManager.Contracts.Dtos; using TaskManager.Controllers; using TaskManager.Entity; @@ -18,11 +19,10 @@ namespace TaskManager.Controllers public CherySupplierMrpMonthService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { + } - protected override async Task CreateTaskAsync(List plist, JobDbContext dbContext) + protected override async Task ConfirmDataInsertAsync(List plist, JobDbContext dbContext, DbTransaction dbTransaction) { - - if (plist.Count > 0) { List list = new List(); @@ -52,17 +52,12 @@ namespace TaskManager.Controllers con.QuantityMeet12 = p.QuantityDemand12; list.Add(con); }); - - dbContext.BulkInsert(list, new BulkOperationOptions() { UseTableLock = false }); - } - - - - - - + await dbContext.BulkInsertAsync(list, options=> { options.Transaction = dbTransaction; options.UseTableLock = false; }); + } return; } + + } }