From f8eadfe47cabfb592303945725623bde2386ad65 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com>
Date: Thu, 12 Jun 2025 10:09:04 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../CheryRecurringJobOutPageController.cs | 296 ++++++++++++++----
.../CherySupplierConMmrpService.cs | 16 +
.../CherySupplierMrpMonthService.cs | 20 ++
3 files changed, 272 insertions(+), 60 deletions(-)
diff --git a/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs b/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs
index 5889592..8c700f5 100644
--- a/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs
+++ b/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs
@@ -488,41 +488,9 @@ namespace TaskManager.Controllers
await _repository.DeleteAsync(id);
return new JsonResult(new { Code = 200, Message = "删除成功!" }); ;
}
- ///
- /// 分页
- ///
- /// 第几页
- /// 每页条数
- /// 排序字段
- /// 正序还是倒序
- /// 过滤条件
- ///
- //[HttpGet]
- //public async Task GetPaged(
- //[FromQuery] int pageNumber = 1,
- //[FromQuery] int pageSize = 10,
- //[FromQuery] string sortBy = "",
- //[FromQuery] bool isAscending = true,
- //[FromQuery] Dictionary filters = null)
- //{
- // var pagingParams = new PagingParams
- // {
- // PageNumber = pageNumber,
- // PageSize = pageSize,
- // SortBy = sortBy,
- // IsAscending = isAscending,
- // Filters = filters
- // };
-
- // // 可以在这里构建表达式树过滤条件
- // Expression> filter = null;
-
- // var pagedResult = await _repository.GetPagedAsync(filter, pagingParams);
- // return Ok(pagedResult);
- //}
///
- /// 分页New
+ /// 分页
///
///
///
@@ -553,34 +521,7 @@ namespace TaskManager.Controllers
/// 排序字段
/// 正序还是倒序
/// 过滤条件
- ///
-
- // [HttpGet]
- // public async Task Export([FromQuery] int pageNumber = 1,
- //[FromQuery] int pageSize = 10,
- //[FromQuery] string sortBy = "",
- //[FromQuery] bool isAscending = true,
- //[FromQuery] Dictionary filters = null)
- // {
- // var pagingParams = new PagingParams
- // {
- // PageNumber = pageNumber,
- // PageSize = pageSize,
- // SortBy = sortBy,
- // IsAscending = isAscending,
- // Filters = filters
- // };
- // // 可以在这里构建表达式树过滤条件
- // //Expression> filter = null;
-
- // var pagedResult = await _repository.GetPagedAsync(null, pagingParams);
- // return await ExportFile(pagedResult.Data, Guid.NewGuid().ToString() + ".xlsx");
-
-
- // }
-
-
///
/// 导出New
///
@@ -777,3 +718,238 @@ namespace TaskManager.Controllers
}
+
+
+/*并发修改*/
+
+//public class CheryRecurringJobOutPageController : RecurringJobBaseController
+// where T : CherryReadBaseEntity, new()
+// where ToutputDetial : CherryReadBaseEntityDto
+//{
+// // 其他成员保持不变...
+
+// // 并发控制参数
+// private readonly int _maxConcurrency;
+// private readonly SemaphoreSlim _semaphore;
+
+// public CheryRecurringJobOutPageController(
+// HttpClient httpClient,
+// JobDbContext jobDbContext,
+// LogController log,
+// IRepository repository,
+// int maxConcurrency = 5) : base(httpClient, jobDbContext, log)
+// {
+// _repository = repository;
+// _maxConcurrency = maxConcurrency;
+// _semaphore = new SemaphoreSlim(maxConcurrency);
+// }
+
+// [NonAction]
+// public async Task> FetchAllDataAsync(string inputdate)
+// {
+// var allData = new List();
+// int totalItems = 0;
+// int pageSize = 0;
+// int currentPage = 1;
+// string date = !string.IsNullOrEmpty(inputdate) ? inputdate : DateTime.Now.ToString("yyyy-MM-dd");
+
+// var taskId = Guid.NewGuid();
+// var version = date.Replace("-", "");
+
+
+// var readedcount = _jobDbContext.Set().Where(p => p.RequestDate == inputdate).Count();
+// if (readedcount == 0)
+// {
+// PagedResponse firstResponse = await GetPageAsync(new PAGE_DTO() { Date = date, PageSize = CPageSize, IsForce = false }, taskId, version);
+
+// if (firstResponse == null || firstResponse.Code != 200)
+// {
+// await _logger.AddError("首次请求失败,无法获取分页信息。", TaskName, taskId, version);
+// return allData;
+// }
+// if (firstResponse.Data.Total == "0")
+// {
+// await _logger.AddInfo("首次请求失败,Total为0是否已经全部读取过。", TaskName, taskId, version);
+// return allData;
+// }
+// if (readedcount != int.Parse(firstResponse.Data.Total))
+// {
+// var ids = _jobDbContext.Set().Where(p => p.RequestDate == inputdate).Select(p => p.Id).ToList();
+// totalItems = int.Parse(firstResponse.Data.Total);
+// pageSize = int.Parse(firstResponse.Data.PageSize);
+// List pagefirstList = new List();
+
+// foreach (var itm in firstResponse.Data.Rows)
+// {
+// T entity = new T();
+// entity.InjectFrom(itm);
+// entity.CreationTime = DateTime.Now;
+// entity.RequestDate = date;
+// pagefirstList.Add(entity);
+// allData.Add(itm);
+// }
+
+// if (pagefirstList.Any())
+// {
+// await InsertDataAsync(pagefirstList);
+// }
+
+// // 计算总页数
+// int totalPages = (int)Math.Ceiling((double)totalItems / pageSize);
+
+// // 并发请求剩余页面
+// await FetchPagesConcurrently(2, totalPages, date, taskId, version, ids, allData);
+
+// await _logger.AddInfo($"所有数据获取完成,总共获取了 {allData.Count} 条记录", TaskName, taskId, version);
+// }
+// }
+// else
+// {
+// // 类似的逻辑,修改为并发请求
+// PagedResponse firstResponse = await GetPageAsync(new PAGE_DTO() { Date = date, PageSize = CPageSize, IsForce = true }, taskId, version);
+// if (firstResponse == null || firstResponse.Code != 200)
+// {
+// await _logger.AddInfo("首次请求失败,无法获取分页信息。", TaskName, taskId, version);
+// return allData;
+// }
+// if (firstResponse.Data.Total == "0")
+// {
+// await _logger.AddInfo("首次请求失败,Total为0是否已经全部读取过。", TaskName, taskId, version);
+// return allData;
+// }
+// if (readedcount != int.Parse(firstResponse.Data.Total))
+// {
+// var ids = _jobDbContext.Set().Where(p => p.RequestDate == inputdate).Select(p => p.Id).ToList();
+// totalItems = int.Parse(firstResponse.Data.Total);
+// pageSize = int.Parse(firstResponse.Data.PageSize);
+// List pagefirstList = new List();
+
+// foreach (var itm in firstResponse.Data.Rows)
+// {
+// T entity = new T();
+// entity.InjectFrom(itm);
+// entity.CreationTime = DateTime.Now;
+// entity.RequestDate = date;
+// pagefirstList.Add(entity);
+// allData.Add(itm);
+// }
+
+// if (pagefirstList.Any())
+// {
+// await InsertDataAsync(pagefirstList);
+// }
+
+// int totalPages = (int)Math.Ceiling((double)totalItems / pageSize);
+
+// // 并发请求剩余页面
+// await FetchPagesConcurrently(2, totalPages, date, taskId, version, ids, allData);
+
+// await _logger.AddInfo($"所有数据获取完成,总共获取了 {allData.Count} 条记录", TaskName, taskId, version);
+// }
+// }
+
+// return allData;
+// }
+
+// private async Task FetchPagesConcurrently(int startPage, int totalPages, string date, Guid taskId, string version, List existingIds, List allData)
+// {
+// var tasks = new List();
+
+// // 为每个页面创建一个任务
+// for (int page = startPage; page <= totalPages; page++)
+// {
+// int currentPage = page; // 避免闭包问题
+// tasks.Add(ProcessPageAsync(currentPage, date, taskId, version, existingIds, allData));
+// }
+
+// // 分批执行任务,控制并发量
+// for (int i = 0; i < tasks.Count; i += _maxConcurrency)
+// {
+// int batchSize = Math.Min(_maxConcurrency, tasks.Count - i);
+// var batch = tasks.GetRange(i, batchSize);
+// await Task.WhenAll(batch);
+// }
+// }
+
+// private async Task ProcessPageAsync(int page, string date, Guid taskId, string version, List existingIds, List allData)
+// {
+// await _semaphore.WaitAsync(); // 限制并发量
+// try
+// {
+// PAGE_DTO pageinput = new PAGE_DTO() { Date = date, PageNum = page, PageSize = CPageSize, IsForce = existingIds.Count == 0 ? false : true };
+// //Console.WriteLine($"正在请求第 {page} 页...");
+// PagedResponse pageResponse = await GetPageAsync(pageinput, taskId, version);
+
+// if (pageResponse?.Data.Rows != null && pageResponse.Data.Rows.Count > 0)
+// {
+// List pageList = new List();
+
+// foreach (var itm in pageResponse.Data.Rows)
+// {
+// T entity = new T();
+// entity.InjectFrom(itm);
+// entity.CreationTime = DateTime.Now;
+// entity.RequestDate = date;
+// pageList.Add(entity);
+// allData.Add(itm);
+// }
+
+// if (pageList.Any())
+// {
+// await InsertDataAsync(pageList);
+// }
+// }
+// else
+// {
+// await _logger.AddInfo($"第 {page} 页未返回数据", TaskName, taskId, version);
+// }
+// }
+// catch (Exception ex)
+// {
+// await _logger.AddError($"第 {page} 页请求出错: {ex.Message}", TaskName, taskId, version);
+// }
+// finally
+// {
+// _semaphore.Release(); // 释放信号量
+// }
+// }
+
+// // 优化数据库插入方法,支持批量处理
+// private async Task InsertDataAsync(List list)
+// {
+// if (list.Any())
+// {
+// // 使用分块处理大列表,避免内存压力
+// int batchSize = 500;
+// for (int i = 0; i < list.Count; i += batchSize)
+// {
+// int end = Math.Min(i + batchSize, list.Count);
+// var batch = list.GetRange(i, end - i);
+
+// using (var transaction = await _jobDbContext.Database.BeginTransactionAsync())
+// {
+// try
+// {
+// await _jobDbContext.BulkMergeAsync(batch, options => { options.ColumnPrimaryKeyExpression = p => p.Id; });
+// await ConfirmDataInsertAsync(batch, _jobDbContext, transaction.GetDbTransaction());
+// await transaction.CommitAsync();
+// }
+// catch (Exception ex)
+// {
+// await transaction.RollbackAsync();
+// await _logger.AddError($"数据插入失败: {ex.Message}", TaskName, Guid.NewGuid(), "1.0");
+// }
+// }
+
+// // 短暂延迟,避免数据库过载
+// await Task.Delay(100);
+// }
+// }
+// }
+
+// // 其他方法保持不变...
+//}
+
+
+
+
diff --git a/API/Wood.Service/Controllers/CherySupplierConMmrpService.cs b/API/Wood.Service/Controllers/CherySupplierConMmrpService.cs
index aa9b8ac..7a12d94 100644
--- a/API/Wood.Service/Controllers/CherySupplierConMmrpService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierConMmrpService.cs
@@ -19,6 +19,22 @@ namespace TaskManager.Controllers
public CherySupplierConMmrpService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
{
}
+
+ [HttpGet]
+ public async Task GetDetialByID(String id)
+ {
+
+ SUPPLIER_MRP_MONTH first = new SUPPLIER_MRP_MONTH();
+ var m = await _jobDbContext.SUPPLIER_MRP_MONTH.FirstOrDefaultAsync(p => p.Id == id);
+ if (m != null)
+ {
+ return m;
+ }
+ return first;
+
+ }
+
+
///
/// 审批通过
///
diff --git a/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs b/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs
index a7a8665..4579a5b 100644
--- a/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs
@@ -1,11 +1,15 @@
using Magicodes.ExporterAndImporter.Core;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
using System.Data.Common;
+using System.Linq.Dynamic.Core;
using TaskManager.Contracts.Dtos;
using TaskManager.Controllers;
using TaskManager.Entity;
using TaskManager.Entity.Entitys;
using TaskManager.EntityFramework;
using Z.BulkOperations;
+using Z.EntityFramework.Extensions;
namespace TaskManager.Controllers
@@ -21,6 +25,22 @@ namespace TaskManager.Controllers
}
+
+ [HttpGet]
+ public async Task GetDetialByID(String id)
+ {
+
+ SUPPLIER_MRP_MONTH first = new SUPPLIER_MRP_MONTH();
+ var m = await _jobDbContext.SUPPLIER_MRP_MONTH.FirstOrDefaultAsync(p => p.Id == id);
+ if (m != null)
+ {
+ return m;
+ }
+ return first;
+
+ }
+
+
protected override async Task ConfirmDataInsertAsync(List plist, JobDbContext dbContext, DbTransaction dbTransaction)
{
if (plist.Count > 0)