Browse Source

更新版本

master
赵新宇 1 week ago
parent
commit
f8eadfe47c
  1. 296
      API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs
  2. 16
      API/Wood.Service/Controllers/CherySupplierConMmrpService.cs
  3. 20
      API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs

296
API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs

@ -488,41 +488,9 @@ namespace TaskManager.Controllers
await _repository.DeleteAsync(id);
return new JsonResult(new { Code = 200, Message = "删除成功!" }); ;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="pageNumber">第几页</param>
/// <param name="pageSize">每页条数</param>
/// <param name="sortBy">排序字段</param>
/// <param name="isAscending">正序还是倒序</param>
/// <param name="filters">过滤条件</param>
/// <returns></returns>
//[HttpGet]
//public async Task<ActionResult> GetPaged(
//[FromQuery] int pageNumber = 1,
//[FromQuery] int pageSize = 10,
//[FromQuery] string sortBy = "",
//[FromQuery] bool isAscending = true,
//[FromQuery] Dictionary<string, string> filters = null)
//{
// var pagingParams = new PagingParams
// {
// PageNumber = pageNumber,
// PageSize = pageSize,
// SortBy = sortBy,
// IsAscending = isAscending,
// Filters = filters
// };
// // 可以在这里构建表达式树过滤条件
// Expression<Func<T, bool>> filter = null;
// var pagedResult = await _repository.GetPagedAsync(filter, pagingParams);
// return Ok(pagedResult);
//}
/// <summary>
/// 分页New
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@ -553,34 +521,7 @@ namespace TaskManager.Controllers
/// <param name="sortBy">排序字段</param>
/// <param name="isAscending">正序还是倒序</param>
/// <param name="filters">过滤条件</param>
/// <returns></returns>
// [HttpGet]
// public async Task<FileStreamResult> Export([FromQuery] int pageNumber = 1,
//[FromQuery] int pageSize = 10,
//[FromQuery] string sortBy = "",
//[FromQuery] bool isAscending = true,
//[FromQuery] Dictionary<string, string> filters = null)
// {
// var pagingParams = new PagingParams
// {
// PageNumber = pageNumber,
// PageSize = pageSize,
// SortBy = sortBy,
// IsAscending = isAscending,
// Filters = filters
// };
// // 可以在这里构建表达式树过滤条件
// //Expression<Func<T, bool>> filter = null;
// var pagedResult = await _repository.GetPagedAsync(null, pagingParams);
// return await ExportFile(pagedResult.Data, Guid.NewGuid().ToString() + ".xlsx");
// }
/// <summary>
/// 导出New
/// </summary>
@ -777,3 +718,238 @@ namespace TaskManager.Controllers
}
/*并发修改*/
//public class CheryRecurringJobOutPageController<T, ToutputDetial> : 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<T> repository,
// int maxConcurrency = 5) : base(httpClient, jobDbContext, log)
// {
// _repository = repository;
// _maxConcurrency = maxConcurrency;
// _semaphore = new SemaphoreSlim(maxConcurrency);
// }
// [NonAction]
// public async Task<List<ToutputDetial>> FetchAllDataAsync(string inputdate)
// {
// var allData = new List<ToutputDetial>();
// 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<T>().Where(p => p.RequestDate == inputdate).Count();
// if (readedcount == 0)
// {
// PagedResponse<ToutputDetial> 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<T>().Where(p => p.RequestDate == inputdate).Select(p => p.Id).ToList();
// totalItems = int.Parse(firstResponse.Data.Total);
// pageSize = int.Parse(firstResponse.Data.PageSize);
// List<T> pagefirstList = new List<T>();
// 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<ToutputDetial> 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<T>().Where(p => p.RequestDate == inputdate).Select(p => p.Id).ToList();
// totalItems = int.Parse(firstResponse.Data.Total);
// pageSize = int.Parse(firstResponse.Data.PageSize);
// List<T> pagefirstList = new List<T>();
// 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<int> existingIds, List<ToutputDetial> allData)
// {
// var tasks = new List<Task>();
// // 为每个页面创建一个任务
// 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<int> existingIds, List<ToutputDetial> 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<ToutputDetial> pageResponse = await GetPageAsync(pageinput, taskId, version);
// if (pageResponse?.Data.Rows != null && pageResponse.Data.Rows.Count > 0)
// {
// List<T> pageList = new List<T>();
// 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<T> 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);
// }
// }
// }
// // 其他方法保持不变...
//}

16
API/Wood.Service/Controllers/CherySupplierConMmrpService.cs

@ -19,6 +19,22 @@ namespace TaskManager.Controllers
public CherySupplierConMmrpService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository<SUPPLIER_CON_MMRP> repository) : base(httpClient, jobDbContext, log, repository)
{
}
[HttpGet]
public async Task<SUPPLIER_MRP_MONTH> 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;
}
/// <summary>
/// 审批通过
/// </summary>

20
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<SUPPLIER_MRP_MONTH> 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<SUPPLIER_MRP_MONTH> plist, JobDbContext dbContext, DbTransaction dbTransaction)
{
if (plist.Count > 0)

Loading…
Cancel
Save