Browse Source

更新

master
赵新宇 2 weeks ago
parent
commit
06264cb86d
  1. 1
      .gitignore
  2. 4
      API/TaskManager.Contracts/TaskManager.Contracts.csproj
  3. 28
      API/TaskManager.EntityFramework/IRepository/IRepository.cs
  4. 234
      API/TaskManager.EntityFramework/Repository/Repository.cs
  5. 50
      API/TaskManager.EntityFramework/Repository/Uow/Uow.cs
  6. 9
      API/Wood.Admin.WebApi/Program.cs
  7. 4
      API/Wood.Admin.WebApi/Properties/launchSettings.json
  8. 17
      API/Wood.Admin.WebApi/Startup.cs
  9. 17
      API/Wood.Admin.WebApi/appsettings.json
  10. 12
      API/Wood.Service/Controllers/RecurringJobBaseController.cs
  11. 6
      API/Wood.Service/Controllers/RecurringJobInputPageController.cs
  12. 109
      API/Wood.Service/Controllers/RecurringJobOutPageController.cs
  13. 3
      API/Wood.Service/Controllers/SUPPLIER_DEL_STATE_Service.cs
  14. 3
      API/Wood.Service/Controllers/SUPPLIER_INV_DATA_Service.cs
  15. 3
      API/Wood.Service/Controllers/SUPPLIER_MRP_DATE_Service.cs
  16. 3
      API/Wood.Service/Controllers/SUPPLIER_MRP_MONTH_Service.cs
  17. 3
      API/Wood.Service/Controllers/SUPPLIER_MRP_Service.cs
  18. 3
      API/Wood.Service/Controllers/SUPPLIER_MRP_WARNING_Service.cs
  19. 3
      API/Wood.Service/Controllers/SUPPLIER_PO_Service.cs
  20. 3
      API/Wood.Service/Controllers/SUPPLIER_PRO_CSCHEDUL_Service.cs
  21. 2
      API/Wood.Service/Controllers/SUPPLIER_PRO_HSCHEDUL_Service.cs
  22. 5
      API/Wood.Service/Controllers/SUPPLIER_PRO_PLANING_Service.cs
  23. 2
      API/Wood.Service/Controllers/SUPPLIER_PRO_TSCHEDUL_Service.cs
  24. 2
      API/Wood.Service/Controllers/SUPPLIER_RETURN_Service.cs
  25. 2
      API/Wood.Service/Controllers/SUPPLIER_SA_WEEK_Service.cs
  26. 2
      API/Wood.Service/Controllers/SUPPLIER_SINV_DATA_Service.cs
  27. 75
      API/Wood.Util/EntityHelper.cs

1
.gitignore

@ -29,3 +29,4 @@ bin-release/
/API/Wood.Admin.WebApi/wwwroot/uploads
bin/
obj/
/.vs/VSWorkspaceState.json

4
API/TaskManager.Contracts/TaskManager.Contracts.csproj

@ -10,4 +10,8 @@
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
<ItemGroup>
<Folder Include="新文件夹\" />
</ItemGroup>
</Project>

28
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<TEntity> where TEntity : BaseEntity
{
Task<TEntity> GetByIdAsync(int id);
Task<IEnumerable<TEntity>> GetAllAsync();
Task<TEntity> AddAsync(TEntity entity);
Task UpdateAsync(TEntity entity);
Task DeleteAsync(int id);
Task<PagedResult<TEntity>> GetPagedAsync(PagingParams pagingParams);
Task<PagedResult<TEntity>> GetPagedAsync(
Expression<Func<TEntity, bool>> filter = null,
PagingParams pagingParams = null);
}
}

234
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<TEntity> : IRepository<TEntity>
where TEntity : BaseEntity
{
private readonly DbContext _context;
private readonly DbSet<TEntity> _dbSet;
public Repository(DbContext context)
{
_context = context;
_dbSet = context.Set<TEntity>();
}
public async Task<TEntity> GetByIdAsync(int id)
{
return await _dbSet.FindAsync(id);
}
public async Task<IEnumerable<TEntity>> GetAllAsync()
{
return await _dbSet.ToListAsync();
}
public async Task<TEntity> 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<PagedResult<TEntity>> GetPagedAsync(PagingParams pagingParams)
{
return await _dbSet.AsNoTracking().ToPagedListAsync(pagingParams);
}
public async Task<PagedResult<TEntity>> GetPagedAsync(
Expression<Func<TEntity, bool>> filter = null,
PagingParams pagingParams = null)
{
IQueryable<TEntity> 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<T>
{
public List<T> 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<T>();
}
}
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<string, string> Filters { get; set; } = new();
}
public static class QueryableExtensions
{
public static IQueryable<T> ApplySort<T>(this IQueryable<T> 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<T>(resultExpression);
}
public static IQueryable<T> ApplyFilters<T>(this IQueryable<T> query, Dictionary<string, string> 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<Func<T, bool>>(equalExpression, parameter);
query = query.Where(lambda);
}
}
return query;
}
public static IQueryable<T> ApplyStringFilter<T>(this IQueryable<T> 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<Func<T, bool>>(containsExpression, parameter);
query = query.Where(lambda);
}
return query;
}
public static async Task<PagedResult<T>> ToPagedListAsync<T>(this IQueryable<T> 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<T>
{
Data = items,
TotalCount = count,
PageNumber = pagingParams.PageNumber,
PageSize = pagingParams.PageSize
};
}
}
}

50
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<TEntity> GetRepository<TEntity>() where TEntity : BaseEntity;
Task<int> SaveChangesAsync();
}
public class TaskUnitOfWork : ITaskUnitOfWork
{
private readonly DbContext _context;
private readonly Dictionary<Type, object> _repositories = new();
public TaskUnitOfWork(DbContext context)
{
_context = context;
}
public IRepository<TEntity> GetRepository<TEntity>() where TEntity : BaseEntity
{
if (_repositories.TryGetValue(typeof(TEntity), out var repo))
{
return (IRepository<TEntity>)repo;
}
var newRepo = new Repository<TEntity>(_context);
_repositories[typeof(TEntity)] = newRepo;
return newRepo;
}
public async Task<int> SaveChangesAsync()
{
return await _context.SaveChangesAsync();
}
public void Dispose()
{
_context.Dispose();
}
}
}

9
API/Wood.Admin.WebApi/Program.cs

@ -55,7 +55,14 @@ namespace Wood.Admin.WebApi
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
webBuilder.ConfigureKestrel(options =>
{
// 配置HTTP端口
options.ListenAnyIP(7629);
// 配置HTTPS端口
//options.ListenLocalhost(5002, configure => configure.UseHttps());
});
});
}
}

4
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"
}
}
}

17
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<string[]>() ?? new[] { "default" };
});
services.AddScoped<ITaskUnitOfWork, TaskUnitOfWork>();
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();

17
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"
// //}
// }
//}
}

12
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]+", "");
}
}

6
API/Wood.Service/Controllers/RecurringJobInputPageController.cs

@ -1,6 +1,6 @@
namespace TaskManager.Controllers
{
public class RecurringJobInputPageController
{
}
//public class RecurringJobInputPageController<T,TINPUT>: RecurringJobBaseController
//{
//}
}

109
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<T, ToutputDetial> : RecurringJobBaseController where T : CherryReadBaseEntity, new() where ToutputDetial : CherryReadBaseEntityDto
{
public RecurringJobOutPageController(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log)
protected readonly IRepository<T> _repository;
public RecurringJobOutPageController(HttpClient httpClient, JobDbContext jobDbContext, LogController log,IRepository<T> repository) : base(httpClient, jobDbContext, log)
{
_repository = repository;
}
public async Task<List<ToutputDetial>> 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<PagedResponse<ToutputDetial>> GetPageAsync(PAGE_DTO input)
{
try
@ -182,8 +179,6 @@ namespace TaskManager.Controllers
new CustomDateTimeConverter("yyyy-MM-dd HH:mm:ss") // 日期转换
}
};
return JsonSerializer.Deserialize<PagedResponse<ToutputDetial>>(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<PagedResponse<OUTPUT>>(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<ActionResult<IEnumerable<T>>> GetAll()
{
return await _repository.GetAllAsync() as List<T>;
}
[HttpGet("{id}")]
public async Task<ActionResult<T>> GetById(int id)
{
var entity = await _repository.GetByIdAsync(id);
if (entity == null) return NotFound();
return entity;
}
[HttpPost]
public async Task<ActionResult<T>> Create(T entity)
{
var createdEntity = await _repository.AddAsync(entity);
return CreatedAtAction(nameof(GetById), new { id = createdEntity.Id }, createdEntity);
}
[HttpPut("{id}")]
public async Task<IActionResult> Update(int id, T entity)
{
if (id != entity.UId) return BadRequest();
await _repository.UpdateAsync(entity);
return NoContent();
}
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)
{
await _repository.DeleteAsync(id);
return NoContent();
}
[HttpGet]
public async Task<ActionResult<PagedResult<T>>> 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);
}
//GET /api/products?pageNumber=1&pageSize=10&filters[name]=Phone&filters[price]=999
// 反序列化时使用

3
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<SUPPLIER_DEL_STATE, SUPPLIER_DEL_STATE_DETAIL_DTO>
{
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<SUPPLIER_DEL_STATE> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

3
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<SUPPLIER_INV_DATA, SUPPLIER_INV_DATA_DETAIL_DTO>
{
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<SUPPLIER_INV_DATA> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

3
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<SUPPLIER_MRP_DATE, SUPPLIER_MRP_DATE_DETAIL_DTO>
{
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<SUPPLIER_MRP_DATE> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

3
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<SUPPLIER_MRP_MONTH, SUPPLIER_MRP_MONTH_DETAIL_DTO>
{
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<SUPPLIER_MRP_MONTH> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

3
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<SUPPLIER_MRP_STATE, SUPPLIER_MRP_STATE_DETIAL_DTO>
{
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<SUPPLIER_MRP_STATE> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

3
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<SUPPLIER_MRP_WARNING, SUPPLIER_MRP_WARNING_DETAIL_DTO>
{
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<SUPPLIER_MRP_WARNING> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

3
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<SUPPLIER_PO, SUPPLIER_PO_DETAIL_DTO>
{
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<SUPPLIER_PO> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

3
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<SUPPLIER_PRO_CSCHEDUL, SUPPLIER_PRO_CSCHEDUL_DETAIL_DTO>
{
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<SUPPLIER_PRO_CSCHEDUL> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

2
API/Wood.Service/Controllers/SUPPLIER_PRO_HSCHEDUL_Service.cs

@ -8,7 +8,7 @@ namespace TaskManager.Controllers
//过焊装未过总装
public class SUPPLIER_PRO_HSCHEDUL_Service : RecurringJobOutPageController<SUPPLIER_PRO_HSCHEDUL, SUPPLIER_PRO_HSCHEDUL_DETAIL_DTO>
{
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<SUPPLIER_PRO_HSCHEDUL> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

5
API/Wood.Service/Controllers/SUPPLIER_PRO_PLANING_Service.cs

@ -6,12 +6,9 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
//整车月度生产计划
public class SupplierProPlaningService : RecurringJobOutPageController<SUPPLIER_PRO_PLANING, SUPPLIER_PRO_PLANING_DETIAL_DTO>
{
public SupplierProPlaningService(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log)
public SupplierProPlaningService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository<SUPPLIER_PRO_PLANING> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

2
API/Wood.Service/Controllers/SUPPLIER_PRO_TSCHEDUL_Service.cs

@ -8,7 +8,7 @@ namespace TaskManager.Controllers
//过涂装未过总装
public class SUPPLIER_PRO_TSCHEDUL_Service : RecurringJobOutPageController<SUPPLIER_PRO_TSCHEDUL, SUPPLIER_PRO_TSCHEDUL_DETAIL_DTO>
{
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<SUPPLIER_PRO_TSCHEDUL> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

2
API/Wood.Service/Controllers/SUPPLIER_RETURN_Service.cs

@ -8,7 +8,7 @@ namespace TaskManager.Controllers
//退货单
public class SUPPLIER_RETURN_Service : RecurringJobOutPageController<SUPPLIER_RETURN, SUPPLIER_RETURN_DETAIL_DTO>
{
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<SUPPLIER_RETURN> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

2
API/Wood.Service/Controllers/SUPPLIER_SA_WEEK_Service.cs

@ -10,7 +10,7 @@ namespace TaskManager.Controllers
/// </summary>
public class SUPPLIER_SA_WEEK_Service : RecurringJobOutPageController<SUPPLIER_SA_WEEK, SUPPLIER_SA_WEEK_DETAIL_DTO>
{
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<SUPPLIER_SA_WEEK> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

2
API/Wood.Service/Controllers/SUPPLIER_SINV_DATA_Service.cs

@ -7,7 +7,7 @@ namespace TaskManager.Controllers
{
public class SUPPLIER_SINV_DATA_Service : RecurringJobOutPageController<SUPPLIER_SINV_DATA, SUPPLIER_SINV_DATA_DETAIL_DTO>
{
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<SUPPLIER_SINV_DATA> repository) : base(httpClient, jobDbContext, log, repository)
{
}
}

75
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<T>
{
public List<T> 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<T>();
}
}
public static class QueryableExtensions
{
public static PagedResult<T> ToPagedResult<T>(this IQueryable<T> query, int pageNumber, int pageSize)
{
var result = new PagedResult<T>
{
PageNumber = pageNumber,
PageSize = pageSize,
TotalItems = query.Count()
};
result.Items = query
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.ToList();
return result;
}
public static IQueryable<T> ApplySorting<T>(this IQueryable<T> 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<T>(resultExpression);
}
}
}
Loading…
Cancel
Save