diff --git a/.gitignore b/.gitignore index 36e9ce1..56c82aa 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ bin-release/ /API/Wood.Admin.WebApi/wwwroot/uploads bin/ obj/ +/.vs/VSWorkspaceState.json diff --git a/API/TaskManager.Contracts/TaskManager.Contracts.csproj b/API/TaskManager.Contracts/TaskManager.Contracts.csproj index 3b5b170..c4d09d0 100644 --- a/API/TaskManager.Contracts/TaskManager.Contracts.csproj +++ b/API/TaskManager.Contracts/TaskManager.Contracts.csproj @@ -10,4 +10,8 @@ + + + + diff --git a/API/TaskManager.EntityFramework/IRepository/IRepository.cs b/API/TaskManager.EntityFramework/IRepository/IRepository.cs new file mode 100644 index 0000000..ef47734 --- /dev/null +++ b/API/TaskManager.EntityFramework/IRepository/IRepository.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; +using TaskManager.Entity; +using TaskManager.EntityFramework.Repository; + +namespace TaskManager.EntityFramework +{ + public interface IRepository where TEntity : BaseEntity + { + Task GetByIdAsync(int id); + Task> GetAllAsync(); + Task AddAsync(TEntity entity); + Task UpdateAsync(TEntity entity); + Task DeleteAsync(int id); + + Task> GetPagedAsync(PagingParams pagingParams); + + + Task> GetPagedAsync( + Expression> filter = null, + PagingParams pagingParams = null); + + } +} \ No newline at end of file diff --git a/API/TaskManager.EntityFramework/Repository/Repository.cs b/API/TaskManager.EntityFramework/Repository/Repository.cs new file mode 100644 index 0000000..196a0fd --- /dev/null +++ b/API/TaskManager.EntityFramework/Repository/Repository.cs @@ -0,0 +1,234 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using TaskManager.Entity; +using TaskManager.EntityFramework; +using Wood.Util; + +namespace TaskManager.EntityFramework.Repository +{ + + + + + public class Repository : IRepository + where TEntity : BaseEntity + { + private readonly DbContext _context; + private readonly DbSet _dbSet; + + public Repository(DbContext context) + { + _context = context; + _dbSet = context.Set(); + } + + public async Task GetByIdAsync(int id) + { + return await _dbSet.FindAsync(id); + } + + public async Task> GetAllAsync() + { + return await _dbSet.ToListAsync(); + } + + public async Task AddAsync(TEntity entity) + { + entity.CreationTime = DateTime.UtcNow; + await _dbSet.AddAsync(entity); + await _context.SaveChangesAsync(); + return entity; + } + + public async Task UpdateAsync(TEntity entity) + { + + _dbSet.Update(entity); + await _context.SaveChangesAsync(); + } + + public async Task DeleteAsync(int id) + { + var entity = await _dbSet.FindAsync(id); + if (entity != null) + { + _dbSet.Remove(entity); + await _context.SaveChangesAsync(); + } + } + + public async Task> GetPagedAsync(PagingParams pagingParams) + { + return await _dbSet.AsNoTracking().ToPagedListAsync(pagingParams); + } + + + public async Task> GetPagedAsync( + Expression> filter = null, + PagingParams pagingParams = null) + { + IQueryable query = _dbSet.AsNoTracking(); + + // 应用过滤条件 + if (filter != null) + { + query = query.Where(filter); + } + + // 应用动态过滤 + if (pagingParams?.Filters != null && pagingParams.Filters.Any()) + { + query = query.ApplyFilters(pagingParams.Filters); + } + + // 应用分页和排序 + pagingParams ??= new PagingParams(); + return await query.ToPagedListAsync(pagingParams); + } + + + + + + + } + public class PagedResult + { + public List Data { get; set; } + public int TotalCount { get; set; } + public int PageNumber { get; set; } + public int PageSize { get; set; } + public int TotalPages => (int)Math.Ceiling(TotalCount / (double)PageSize); + + public PagedResult() + { + Data = new List(); + } + } + + + + public class PagingParams + { + private const int MaxPageSize = 50; + private int _pageSize = 10; + + public int PageNumber { get; set; } = 1; + public int PageSize + { + get => _pageSize; + set => _pageSize = (value > MaxPageSize) ? MaxPageSize : value; + } + public string SortBy { get; set; } + public bool IsAscending { get; set; } = true; + + // 新增:过滤条件(键值对) + public Dictionary Filters { get; set; } = new(); + } + + + + + + public static class QueryableExtensions + { + public static IQueryable ApplySort(this IQueryable query, string sortBy, bool isAscending) + { + if (string.IsNullOrEmpty(sortBy)) return query; + + var parameter = Expression.Parameter(typeof(T), "x"); + var property = Expression.Property(parameter, sortBy); + var lambda = Expression.Lambda(property, parameter); + + var methodName = isAscending ? "OrderBy" : "OrderByDescending"; + var resultExpression = Expression.Call( + typeof(Queryable), + methodName, + new[] { typeof(T), property.Type }, + query.Expression, + Expression.Quote(lambda)); + + return query.Provider.CreateQuery(resultExpression); + } + + + public static IQueryable ApplyFilters(this IQueryable query, Dictionary filters) + { + if (filters == null || !filters.Any()) return query; + + foreach (var filter in filters) + { + var property = typeof(T).GetProperty(filter.Key, + BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); + + if (property != null) + { + var parameter = Expression.Parameter(typeof(T), "x"); + var propertyAccess = Expression.Property(parameter, property); + var constant = Expression.Constant( + Convert.ChangeType(filter.Value, property.PropertyType)); + + var equalExpression = Expression.Equal(propertyAccess, constant); + var lambda = Expression.Lambda>(equalExpression, parameter); + + query = query.Where(lambda); + } + } + + return query; + } + + + + public static IQueryable ApplyStringFilter(this IQueryable query, + string propertyName, string value) + { + var property = typeof(T).GetProperty(propertyName, + BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); + + if (property != null && property.PropertyType == typeof(string) && !string.IsNullOrEmpty(value)) + { + var parameter = Expression.Parameter(typeof(T), "x"); + var propertyAccess = Expression.Property(parameter, property); + var containsMethod = typeof(string).GetMethod("Contains", new[] { typeof(string) }); + var constant = Expression.Constant(value); + + var containsExpression = Expression.Call(propertyAccess, containsMethod, constant); + var lambda = Expression.Lambda>(containsExpression, parameter); + + query = query.Where(lambda); + } + + return query; + } + + + + + + public static async Task> ToPagedListAsync(this IQueryable source, PagingParams pagingParams) + { + var count = await source.CountAsync(); + var items = await source + .ApplySort(pagingParams.SortBy, pagingParams.IsAscending) + .Skip((pagingParams.PageNumber - 1) * pagingParams.PageSize) + .Take(pagingParams.PageSize) + .ToListAsync(); + + return new PagedResult + { + Data = items, + TotalCount = count, + PageNumber = pagingParams.PageNumber, + PageSize = pagingParams.PageSize + }; + } + } + +} diff --git a/API/TaskManager.EntityFramework/Repository/Uow/Uow.cs b/API/TaskManager.EntityFramework/Repository/Uow/Uow.cs new file mode 100644 index 0000000..4540751 --- /dev/null +++ b/API/TaskManager.EntityFramework/Repository/Uow/Uow.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TaskManager.Entity; +using TaskManager.EntityFramework; + +namespace TaskManager.EntityFramework.Repository +{ + public interface ITaskUnitOfWork : IDisposable + { + IRepository GetRepository() where TEntity : BaseEntity; + Task SaveChangesAsync(); + } + + public class TaskUnitOfWork : ITaskUnitOfWork + { + private readonly DbContext _context; + private readonly Dictionary _repositories = new(); + + public TaskUnitOfWork(DbContext context) + { + _context = context; + } + + public IRepository GetRepository() where TEntity : BaseEntity + { + if (_repositories.TryGetValue(typeof(TEntity), out var repo)) + { + return (IRepository)repo; + } + + var newRepo = new Repository(_context); + _repositories[typeof(TEntity)] = newRepo; + return newRepo; + } + + public async Task SaveChangesAsync() + { + return await _context.SaveChangesAsync(); + } + + public void Dispose() + { + _context.Dispose(); + } + } +} diff --git a/API/Wood.Admin.WebApi/Program.cs b/API/Wood.Admin.WebApi/Program.cs index e60b116..c73a4f0 100644 --- a/API/Wood.Admin.WebApi/Program.cs +++ b/API/Wood.Admin.WebApi/Program.cs @@ -55,7 +55,14 @@ namespace Wood.Admin.WebApi .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); - }); + webBuilder.ConfigureKestrel(options => + { + // 配置HTTP端口 + options.ListenAnyIP(7629); + // 配置HTTPS端口 + //options.ListenLocalhost(5002, configure => configure.UseHttps()); + }); + }); } } diff --git a/API/Wood.Admin.WebApi/Properties/launchSettings.json b/API/Wood.Admin.WebApi/Properties/launchSettings.json index 008eead..0c2a01b 100644 --- a/API/Wood.Admin.WebApi/Properties/launchSettings.json +++ b/API/Wood.Admin.WebApi/Properties/launchSettings.json @@ -3,7 +3,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:7001", + "applicationUrl": "http://localhost:8888", "sslPort": 0 } }, @@ -16,7 +16,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "http://localhost:7001" + "applicationUrl": "http://localhost:8888" } } } \ No newline at end of file diff --git a/API/Wood.Admin.WebApi/Startup.cs b/API/Wood.Admin.WebApi/Startup.cs index 90d9121..fa255b8 100644 --- a/API/Wood.Admin.WebApi/Startup.cs +++ b/API/Wood.Admin.WebApi/Startup.cs @@ -21,8 +21,11 @@ using System.Reflection; using System.Text; using TaskManager.Controllers; using TaskManager.EntityFramework; +using TaskManager.EntityFramework.Repository; +using TaskManager.EntityFramework.Repository; using Wood.Admin.WebApi.Filter; using Wood.Admin.WebApi.Middleware; +using Wood.Data.Repository; using Wood.Util; namespace Wood.Admin.WebApi @@ -106,7 +109,8 @@ namespace Wood.Admin.WebApi //options.Queues = builder.Configuration.GetSection("Hangfire:ServerOptions:Queues").Get() ?? new[] { "default" }; }); - + services.AddScoped(); + services.AddScoped(typeof(TaskManager.EntityFramework.IRepository<>), typeof(Repository<>)); @@ -144,11 +148,14 @@ namespace Wood.Admin.WebApi //options.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeStyles = System.Globalization.DateTimeStyles.AssumeUniversal }); // 解决DateTimeOffset异常 }); - //添加跨域 - services.AddCors(); + //添加跨域 + //services.AddCors(); + + services.AddCors(); + - //添加缓存支持 - services.AddMemoryCache(); + //添加缓存支持 + services.AddMemoryCache(); //初始化缓存 services.AddCache(); diff --git a/API/Wood.Admin.WebApi/appsettings.json b/API/Wood.Admin.WebApi/appsettings.json index 2d7fd71..31b9f30 100644 --- a/API/Wood.Admin.WebApi/appsettings.json +++ b/API/Wood.Admin.WebApi/appsettings.json @@ -29,4 +29,21 @@ "RefreshTokenExpire": 15, //刷新token有效期限 天 "TokenExpire": 30 //token有效期限 分钟 } + + //"Kestrel": { + // "EndPoints": { + // "Http": { + // "Url": "http://localhost:60075" + // } + // //"Https": { + // // "Url": "https://localhost:5009" + // //} + // } + //} + + + + + + } diff --git a/API/Wood.Service/Controllers/RecurringJobBaseController.cs b/API/Wood.Service/Controllers/RecurringJobBaseController.cs index 1921819..b58ac02 100644 --- a/API/Wood.Service/Controllers/RecurringJobBaseController.cs +++ b/API/Wood.Service/Controllers/RecurringJobBaseController.cs @@ -15,6 +15,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using TaskManager.Entity; using TaskManager.EntityFramework; +using TaskManager.EntityFramework; @@ -31,6 +32,10 @@ namespace TaskManager.Controllers protected string Url { set; get; } = "/v2/get/supplierProPlaning"; protected virtual string TaskName { set; get; } = "SupplierProPlaning"; protected readonly LogController _logger; + + + + public RecurringJobBaseController( HttpClient httpClient, JobDbContext jobDbContext, @@ -150,6 +155,13 @@ namespace TaskManager.Controllers return Regex.Replace(input, @"[\s]+", ""); } + + + + + + + } diff --git a/API/Wood.Service/Controllers/RecurringJobInputPageController.cs b/API/Wood.Service/Controllers/RecurringJobInputPageController.cs index 2af1428..bf2ccc2 100644 --- a/API/Wood.Service/Controllers/RecurringJobInputPageController.cs +++ b/API/Wood.Service/Controllers/RecurringJobInputPageController.cs @@ -1,6 +1,6 @@ namespace TaskManager.Controllers { - public class RecurringJobInputPageController - { - } + //public class RecurringJobInputPageController: RecurringJobBaseController + //{ + //} } diff --git a/API/Wood.Service/Controllers/RecurringJobOutPageController.cs b/API/Wood.Service/Controllers/RecurringJobOutPageController.cs index 5e15069..132b1d2 100644 --- a/API/Wood.Service/Controllers/RecurringJobOutPageController.cs +++ b/API/Wood.Service/Controllers/RecurringJobOutPageController.cs @@ -1,20 +1,26 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Omu.ValueInjecter; - +using System.Linq.Expressions; using System.Text.Json; using System.Text.Json.Serialization; using TaskManager.Contracts.Dtos; using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; +using TaskManager.EntityFramework; +using TaskManager.EntityFramework.Repository; namespace TaskManager.Controllers { public class RecurringJobOutPageController : RecurringJobBaseController where T : CherryReadBaseEntity, new() where ToutputDetial : CherryReadBaseEntityDto { - public RecurringJobOutPageController(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + + + protected readonly IRepository _repository; + public RecurringJobOutPageController(HttpClient httpClient, JobDbContext jobDbContext, LogController log,IRepository repository) : base(httpClient, jobDbContext, log) { + _repository = repository; } public async Task> FetchAllDataAsync(string inputdate) @@ -31,12 +37,6 @@ namespace TaskManager.Controllers - - - - - - if (firstResponse == null || firstResponse.Code != 200) { await _logger.AddError("首次请求失败,无法获取分页信息。", TaskName); @@ -155,9 +155,6 @@ namespace TaskManager.Controllers return allData; } - - - private async Task> GetPageAsync(PAGE_DTO input) { try @@ -182,8 +179,6 @@ namespace TaskManager.Controllers new CustomDateTimeConverter("yyyy-MM-dd HH:mm:ss") // 日期转换 } }; - - return JsonSerializer.Deserialize>(content, options); } else @@ -198,35 +193,6 @@ namespace TaskManager.Controllers return null; } - - - - - - - - - //try - //{ - // var url = $"{_apiUrl}?pageNum={pageNum}"; - // var response = await _httpClient.GetAsync(url); - - // if (response.IsSuccessStatusCode) - // { - // var content = await response.Content.ReadAsStringAsync(); - // return JsonSerializer.Deserialize>(content); - // } - // else - // { - // Console.WriteLine($"请求失败,状态码: {response.StatusCode}"); - // return null; - // } - //} - //catch (Exception ex) - //{ - // Console.WriteLine($"请求发生异常: {ex.Message}"); - // return null; - //} } [HttpGet("Test")] public async Task TestAsync(string url, string path, string taskName, string inputdate) @@ -244,12 +210,69 @@ namespace TaskManager.Controllers await FetchAllDataAsync(string.Empty); } + [HttpGet] + public async Task>> GetAll() + { + return await _repository.GetAllAsync() as List; + } + + [HttpGet("{id}")] + public async Task> GetById(int id) + { + var entity = await _repository.GetByIdAsync(id); + if (entity == null) return NotFound(); + return entity; + } + + [HttpPost] + public async Task> Create(T entity) + { + var createdEntity = await _repository.AddAsync(entity); + return CreatedAtAction(nameof(GetById), new { id = createdEntity.Id }, createdEntity); + } + [HttpPut("{id}")] + public async Task Update(int id, T entity) + { + if (id != entity.UId) return BadRequest(); + + await _repository.UpdateAsync(entity); + return NoContent(); + } + [HttpDelete("{id}")] + public async Task Delete(int id) + { + await _repository.DeleteAsync(id); + return NoContent(); + } + [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); + } + //GET /api/products?pageNumber=1&pageSize=10&filters[name]=Phone&filters[price]=999 - // 反序列化时使用 diff --git a/API/Wood.Service/Controllers/SUPPLIER_DEL_STATE_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_DEL_STATE_Service.cs index 2e7cc45..94625e3 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_DEL_STATE_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_DEL_STATE_Service.cs @@ -2,13 +2,14 @@ using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; +using TaskManager.EntityFramework; namespace TaskManager.Controllers { //看板配送单 public class SUPPLIER_DEL_STATE_Service : RecurringJobOutPageController { - public SUPPLIER_DEL_STATE_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_DEL_STATE_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_INV_DATA_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_INV_DATA_Service.cs index 520ad2a..bd7a6af 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_INV_DATA_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_INV_DATA_Service.cs @@ -2,13 +2,14 @@ using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; +using TaskManager.EntityFramework; namespace TaskManager.Controllers { //奇瑞RDC共享库存 public class SUPPLIER_INV_DATA_Service : RecurringJobOutPageController { - public SUPPLIER_INV_DATA_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_INV_DATA_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_MRP_DATE_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_MRP_DATE_Service.cs index e3948e6..eae6951 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_MRP_DATE_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_MRP_DATE_Service.cs @@ -2,13 +2,14 @@ using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; +using TaskManager.EntityFramework; namespace TaskManager.Controllers { //日物料需求计划 public class SUPPLIER_MRP_DATE_Service : RecurringJobOutPageController { - public SUPPLIER_MRP_DATE_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_MRP_DATE_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_MRP_MONTH_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_MRP_MONTH_Service.cs index 212ec6c..bd68306 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_MRP_MONTH_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_MRP_MONTH_Service.cs @@ -2,12 +2,13 @@ using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; +using TaskManager.EntityFramework; namespace TaskManager.Controllers { public class SUPPLIER_MRP_MONTH_Service : RecurringJobOutPageController { - public SUPPLIER_MRP_MONTH_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_MRP_MONTH_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_MRP_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_MRP_Service.cs index c67512f..6c0b5cf 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_MRP_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_MRP_Service.cs @@ -2,13 +2,14 @@ using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; +using TaskManager.EntityFramework; namespace TaskManager.Controllers { //日MRP状态监控 public class SUPPLIER_MRP_Service : RecurringJobOutPageController { - public SUPPLIER_MRP_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_MRP_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_MRP_WARNING_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_MRP_WARNING_Service.cs index 462476f..a55a4ad 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_MRP_WARNING_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_MRP_WARNING_Service.cs @@ -3,12 +3,13 @@ using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; + namespace TaskManager.Controllers { //日MRP预警推移 public class SUPPLIER_MRP_WARNING_Service : RecurringJobOutPageController { - public SUPPLIER_MRP_WARNING_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_MRP_WARNING_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_PO_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_PO_Service.cs index 42e45ec..13d868e 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_PO_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_PO_Service.cs @@ -3,11 +3,12 @@ using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; + namespace TaskManager.Controllers { public class SUPPLIER_PO_Service : RecurringJobOutPageController { - public SUPPLIER_PO_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_PO_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_PRO_CSCHEDUL_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_PRO_CSCHEDUL_Service.cs index 012a488..85f1065 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_PRO_CSCHEDUL_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_PRO_CSCHEDUL_Service.cs @@ -3,11 +3,12 @@ using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; + namespace TaskManager.Controllers { public class SUPPLIER_PRO_CSCHEDUL_Service : RecurringJobOutPageController { - public SUPPLIER_PRO_CSCHEDUL_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_PRO_CSCHEDUL_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_PRO_HSCHEDUL_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_PRO_HSCHEDUL_Service.cs index 1545a5b..5f73b3c 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_PRO_HSCHEDUL_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_PRO_HSCHEDUL_Service.cs @@ -8,7 +8,7 @@ namespace TaskManager.Controllers //过焊装未过总装 public class SUPPLIER_PRO_HSCHEDUL_Service : RecurringJobOutPageController { - public SUPPLIER_PRO_HSCHEDUL_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_PRO_HSCHEDUL_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_PRO_PLANING_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_PRO_PLANING_Service.cs index 24f4879..4b7cb6f 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_PRO_PLANING_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_PRO_PLANING_Service.cs @@ -6,12 +6,9 @@ using TaskManager.EntityFramework; namespace TaskManager.Controllers { //整车月度生产计划 - - - public class SupplierProPlaningService : RecurringJobOutPageController { - public SupplierProPlaningService(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SupplierProPlaningService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_PRO_TSCHEDUL_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_PRO_TSCHEDUL_Service.cs index 7581659..957d512 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_PRO_TSCHEDUL_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_PRO_TSCHEDUL_Service.cs @@ -8,7 +8,7 @@ namespace TaskManager.Controllers //过涂装未过总装 public class SUPPLIER_PRO_TSCHEDUL_Service : RecurringJobOutPageController { - public SUPPLIER_PRO_TSCHEDUL_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_PRO_TSCHEDUL_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_RETURN_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_RETURN_Service.cs index 134beb1..3c68714 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_RETURN_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_RETURN_Service.cs @@ -8,7 +8,7 @@ namespace TaskManager.Controllers //退货单 public class SUPPLIER_RETURN_Service : RecurringJobOutPageController { - public SUPPLIER_RETURN_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_RETURN_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_SA_WEEK_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_SA_WEEK_Service.cs index 6f4aec1..bc605a6 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_SA_WEEK_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_SA_WEEK_Service.cs @@ -10,7 +10,7 @@ namespace TaskManager.Controllers /// public class SUPPLIER_SA_WEEK_Service : RecurringJobOutPageController { - public SUPPLIER_SA_WEEK_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_SA_WEEK_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Service/Controllers/SUPPLIER_SINV_DATA_Service.cs b/API/Wood.Service/Controllers/SUPPLIER_SINV_DATA_Service.cs index 38b96cc..d761c21 100644 --- a/API/Wood.Service/Controllers/SUPPLIER_SINV_DATA_Service.cs +++ b/API/Wood.Service/Controllers/SUPPLIER_SINV_DATA_Service.cs @@ -7,7 +7,7 @@ namespace TaskManager.Controllers { public class SUPPLIER_SINV_DATA_Service : RecurringJobOutPageController { - public SUPPLIER_SINV_DATA_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) + public SUPPLIER_SINV_DATA_Service(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } } diff --git a/API/Wood.Util/EntityHelper.cs b/API/Wood.Util/EntityHelper.cs new file mode 100644 index 0000000..1e2f7ad --- /dev/null +++ b/API/Wood.Util/EntityHelper.cs @@ -0,0 +1,75 @@ +using Serilog; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Linq.Expressions; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; + +namespace Wood.Util +{ + + public class PagedResult + { + public List Items { get; set; } + public int TotalItems { get; set; } + public int PageNumber { get; set; } + public int PageSize { get; set; } + public int TotalPages => (int)Math.Ceiling(TotalItems / (double)PageSize); + public bool HasPreviousPage => PageNumber > 1; + public bool HasNextPage => PageNumber < TotalPages; + + public PagedResult() + { + Items = new List(); + } + } + + + public static class QueryableExtensions + { + public static PagedResult ToPagedResult(this IQueryable query, int pageNumber, int pageSize) + { + var result = new PagedResult + { + PageNumber = pageNumber, + PageSize = pageSize, + TotalItems = query.Count() + }; + + result.Items = query + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToList(); + + return result; + } + + public static IQueryable ApplySorting(this IQueryable query, string sortField, string sortDirection) + { + if (string.IsNullOrEmpty(sortField)) + return query; + + var parameter = Expression.Parameter(typeof(T), "x"); + var property = Expression.Property(parameter, sortField); + var lambda = Expression.Lambda(property, parameter); + + string methodName = sortDirection?.ToLower() == "desc" ? "OrderByDescending" : "OrderBy"; + var resultExpression = Expression.Call( + typeof(Queryable), + methodName, + new[] { typeof(T), property.Type }, + query.Expression, + Expression.Quote(lambda)); + + return query.Provider.CreateQuery(resultExpression); + } + } + + + + + +}