diff --git a/API/TaskManager.Contracts/Dtos/10_17/SUPPLIER_SINV_DATA_DTO.cs b/API/TaskManager.Contracts/Dtos/10_17/SUPPLIER_SINV_DATA_DTO.cs
index 5d9649f..5bb56ae 100644
--- a/API/TaskManager.Contracts/Dtos/10_17/SUPPLIER_SINV_DATA_DTO.cs
+++ b/API/TaskManager.Contracts/Dtos/10_17/SUPPLIER_SINV_DATA_DTO.cs
@@ -5,86 +5,86 @@ namespace TaskManager.Entity
///
/// 供应商共享库存
///
- public class SUPPLIER_SINV_DATA_DTO
- {
- ///
- /// 供应商代码
- ///
- [ExporterHeader(DisplayName = "供应商代码")]
- [ImporterHeader(Name = "供应商代码")]
- public string SupplierCode { get; set; }
- ///
- /// 供应商名称
- ///
- [ExporterHeader(DisplayName = "供应商名称")]
- [ImporterHeader(Name = "供应商名称")]
- public string SupplierName { get; set; }
- ///
- /// 零件号
- ///
- [ExporterHeader(DisplayName = "零件号")]
- [ImporterHeader(Name = "零件号")]
- public string MaterialCode { get; set; }
- ///
- /// 零件名称
- ///
- [ExporterHeader(DisplayName = "零件名称")]
- [ImporterHeader(Name = "零件名称")]
- public string MaterialDescription { get; set; }
- ///
- /// 物料类型(成品,半成品,原材料)
- ///
- [ExporterHeader(DisplayName = "物料类型")]
- [ImporterHeader(Name = "物料类型")]
- public string MaterialType { get; set; }
- ///
- /// 当前库存数量
- ///
- [ExporterHeader(DisplayName = "当前库存数量")]
- [ImporterHeader(Name = "当前库存数量")]
- public decimal QuantityCurrent { get; set; }
- ///
- /// 原材料在途数量
- ///
- [ExporterHeader(DisplayName = "原材料在途数量")]
- [ImporterHeader(Name = "原材料在途数量")]
- public decimal QuantityPlan { get; set; }
- ///
- /// 库存状态(生产件,呆滞件,备件,KD件)
- ///
- [ExporterHeader(DisplayName = "库存状态")]
- [ImporterHeader(Name = "库存状态")]
- public string InventoryStatus { get; set; }
- ///
- /// 安全库存
- ///
- [ExporterHeader(DisplayName = "安全库存")]
- [ImporterHeader(Name = "安全库存")]
- public decimal SafetyStock { get; set; }
- ///
- /// 生产/采购周期:成品即半成品为生产周期(天),原材料为采购周期(天)
- ///
- [ExporterHeader(DisplayName = "生产/采购周期")]
- [ImporterHeader(Name = "生产/采购周期")]
- public string ProductionCycle { get; set; }
- ///
- /// 库存更新时间-格式:yyyy-MM-ddHH:mm:ss
- ///
- [ExporterHeader(DisplayName = "库存更新时间")]
- [ImporterHeader(Name = "库存更新时间")]
- public string DataUpdateTime { get; set; }
- ///
- /// 批次
- ///
- [ExporterHeader(DisplayName = "批次")]
- [ImporterHeader(Name = "批次")]
- public string? SupplierBatch { get; set; }
- ///
- /// 有效期截止日期 非必填
- ///
- [ExporterHeader(DisplayName = "有效期截止日期")]
- [ImporterHeader(Name = "有效期截止日期")]
- public string? SupplieryxqDate { get; set; }
- }
+ //public class SUPPLIER_SINV_DATA_DTO
+ //{
+ // ///
+ // /// 供应商代码
+ // ///
+ // [ExporterHeader(DisplayName = "供应商代码")]
+ // [ImporterHeader(Name = "供应商代码")]
+ // public string SupplierCode { get; set; }
+ // ///
+ // /// 供应商名称
+ // ///
+ // [ExporterHeader(DisplayName = "供应商名称")]
+ // [ImporterHeader(Name = "供应商名称")]
+ // public string SupplierName { get; set; }
+ // ///
+ // /// 零件号
+ // ///
+ // [ExporterHeader(DisplayName = "零件号")]
+ // [ImporterHeader(Name = "零件号")]
+ // public string MaterialCode { get; set; }
+ // ///
+ // /// 零件名称
+ // ///
+ // [ExporterHeader(DisplayName = "零件名称")]
+ // [ImporterHeader(Name = "零件名称")]
+ // public string MaterialDescription { get; set; }
+ // ///
+ // /// 物料类型(成品,半成品,原材料)
+ // ///
+ // [ExporterHeader(DisplayName = "物料类型")]
+ // [ImporterHeader(Name = "物料类型")]
+ // public string MaterialType { get; set; }
+ // ///
+ // /// 当前库存数量
+ // ///
+ // [ExporterHeader(DisplayName = "当前库存数量")]
+ // [ImporterHeader(Name = "当前库存数量")]
+ // public decimal QuantityCurrent { get; set; }
+ // ///
+ // /// 原材料在途数量
+ // ///
+ // [ExporterHeader(DisplayName = "原材料在途数量")]
+ // [ImporterHeader(Name = "原材料在途数量")]
+ // public decimal QuantityPlan { get; set; }
+ // ///
+ // /// 库存状态(生产件,呆滞件,备件,KD件)
+ // ///
+ // [ExporterHeader(DisplayName = "库存状态")]
+ // [ImporterHeader(Name = "库存状态")]
+ // public string InventoryStatus { get; set; }
+ // ///
+ // /// 安全库存
+ // ///
+ // [ExporterHeader(DisplayName = "安全库存")]
+ // [ImporterHeader(Name = "安全库存")]
+ // public decimal SafetyStock { get; set; }
+ // ///
+ // /// 生产/采购周期:成品即半成品为生产周期(天),原材料为采购周期(天)
+ // ///
+ // [ExporterHeader(DisplayName = "生产/采购周期")]
+ // [ImporterHeader(Name = "生产/采购周期")]
+ // public string ProductionCycle { get; set; }
+ // ///
+ // /// 库存更新时间-格式:yyyy-MM-ddHH:mm:ss
+ // ///
+ // [ExporterHeader(DisplayName = "库存更新时间")]
+ // [ImporterHeader(Name = "库存更新时间")]
+ // public string DataUpdateTime { get; set; }
+ // ///
+ // /// 批次
+ // ///
+ // [ExporterHeader(DisplayName = "批次")]
+ // [ImporterHeader(Name = "批次")]
+ // public string? SupplierBatch { get; set; }
+ // ///
+ // /// 有效期截止日期 非必填
+ // ///
+ // [ExporterHeader(DisplayName = "有效期截止日期")]
+ // [ImporterHeader(Name = "有效期截止日期")]
+ // public string? SupplieryxqDate { get; set; }
+ //}
}
diff --git a/API/TaskManager.Contracts/Dtos/Dtos.cs b/API/TaskManager.Contracts/Dtos/Dtos.cs
index df0335f..a99f0d6 100644
--- a/API/TaskManager.Contracts/Dtos/Dtos.cs
+++ b/API/TaskManager.Contracts/Dtos/Dtos.cs
@@ -1493,19 +1493,90 @@ public class SUPPLIER_MRP_WARNING_DETAIL_DTO : CherryReadBaseEntityDto
public class SUPPLIER_SINV_DATA_DETAIL_DTO:CherryReadBaseEntityDto
{
- public string SupplierCode { get; set; }
- public string SupplierName { get; set; }
- public string MaterialCode { get; set; }
- public string MaterialDescription { get; set; }
- public string MaterialType { get; set; }
- public int QuantityCurrent { get; set; }
- public int QuantityPlan { get; set; }
- public string InventoryStatus { get; set; }
- public int SafetyStock { get; set; }
- public string ProductionCycle { get; set; }
- public string DataUpdateTime { get; set; }
- public string SupplierBatch { get; set; }
- public string SupplieryxqDate { get; set; }
+ ///
+ /// 供应商共享库存
+ ///
+ public class SUPPLIER_SINV_DATA_DTO
+ {
+ ///
+ /// 供应商代码
+ ///
+ [ExporterHeader(DisplayName = "供应商代码")]
+ [ImporterHeader(Name = "供应商代码")]
+ public string SupplierCode { get; set; }
+ ///
+ /// 供应商名称
+ ///
+ [ExporterHeader(DisplayName = "供应商名称")]
+ [ImporterHeader(Name = "供应商名称")]
+ public string SupplierName { get; set; }
+ ///
+ /// 零件号
+ ///
+ [ExporterHeader(DisplayName = "零件号")]
+ [ImporterHeader(Name = "零件号")]
+ public string MaterialCode { get; set; }
+ ///
+ /// 零件名称
+ ///
+ [ExporterHeader(DisplayName = "零件名称")]
+ [ImporterHeader(Name = "零件名称")]
+ public string MaterialDescription { get; set; }
+ ///
+ /// 物料类型(成品,半成品,原材料)
+ ///
+ [ExporterHeader(DisplayName = "物料类型")]
+ [ImporterHeader(Name = "物料类型")]
+ public string MaterialType { get; set; }
+ ///
+ /// 当前库存数量
+ ///
+ [ExporterHeader(DisplayName = "当前库存数量")]
+ [ImporterHeader(Name = "当前库存数量")]
+ public decimal QuantityCurrent { get; set; }
+ ///
+ /// 原材料在途数量
+ ///
+ [ExporterHeader(DisplayName = "原材料在途数量")]
+ [ImporterHeader(Name = "原材料在途数量")]
+ public decimal QuantityPlan { get; set; }
+ ///
+ /// 库存状态(生产件,呆滞件,备件,KD件)
+ ///
+ [ExporterHeader(DisplayName = "库存状态")]
+ [ImporterHeader(Name = "库存状态")]
+ public string InventoryStatus { get; set; }
+ ///
+ /// 安全库存
+ ///
+ [ExporterHeader(DisplayName = "安全库存")]
+ [ImporterHeader(Name = "安全库存")]
+ public decimal SafetyStock { get; set; }
+ ///
+ /// 生产/采购周期:成品即半成品为生产周期(天),原材料为采购周期(天)
+ ///
+ [ExporterHeader(DisplayName = "生产/采购周期")]
+ [ImporterHeader(Name = "生产/采购周期")]
+ public string ProductionCycle { get; set; }
+ ///
+ /// 库存更新时间-格式:yyyy-MM-ddHH:mm:ss
+ ///
+ [ExporterHeader(DisplayName = "库存更新时间")]
+ [ImporterHeader(Name = "库存更新时间")]
+ public string DataUpdateTime { get; set; }
+ ///
+ /// 批次
+ ///
+ [ExporterHeader(DisplayName = "批次")]
+ [ImporterHeader(Name = "批次")]
+ public string? SupplierBatch { get; set; }
+ ///
+ /// 有效期截止日期 非必填
+ ///
+ [ExporterHeader(DisplayName = "有效期截止日期")]
+ [ImporterHeader(Name = "有效期截止日期")]
+ public string? SupplieryxqDate { get; set; }
+ }
}
public class SUPPLIER_SINV_DATA_DTO
diff --git a/API/TaskManager.EntityFramework/IRepository/IRepository.cs b/API/TaskManager.EntityFramework/IRepository/IRepository.cs
index e6cfd74..2244f0e 100644
--- a/API/TaskManager.EntityFramework/IRepository/IRepository.cs
+++ b/API/TaskManager.EntityFramework/IRepository/IRepository.cs
@@ -7,6 +7,7 @@ using System.Text;
using System.Threading.Tasks;
using TaskManager.Entity;
using TaskManager.EntityFramework.Repository;
+using Wood.Util.Filters;
namespace TaskManager.EntityFramework
{
@@ -25,5 +26,9 @@ namespace TaskManager.EntityFramework
Expression> filter = null,
PagingParams pagingParams = null);
+ Task> GetDataPagedAsync(
+ Expression> filter = null,
+ PagingParams pagingParams = null,Condition condition = null);
+
}
}
\ No newline at end of file
diff --git a/API/TaskManager.EntityFramework/Repository/Repository.cs b/API/TaskManager.EntityFramework/Repository/Repository.cs
index 406c071..6a34dfa 100644
--- a/API/TaskManager.EntityFramework/Repository/Repository.cs
+++ b/API/TaskManager.EntityFramework/Repository/Repository.cs
@@ -10,6 +10,7 @@ using System.Threading.Tasks;
using TaskManager.Entity;
using TaskManager.EntityFramework;
using Wood.Util;
+using Wood.Util.Filters;
namespace TaskManager.EntityFramework.Repository
{
@@ -82,7 +83,7 @@ namespace TaskManager.EntityFramework.Repository
// 应用动态过滤
if (pagingParams?.Filters != null && pagingParams.Filters.Any())
{
- query = query.ApplyFilters(pagingParams.Filters);
+ query = query.ApplyFilters(pagingParams.Filters);
}
// 应用分页和排序
@@ -94,6 +95,36 @@ namespace TaskManager.EntityFramework.Repository
return page;
}
+ public async Task> GetDataPagedAsync(
+ Expression> filter = null,
+ PagingParams pagingParams = null,Condition condition = null)
+ {
+ IQueryable query = _dbSet.AsNoTracking();
+
+ // 应用过滤条件
+ if (filter != null)
+ {
+ query = query.Where(filter);
+ }
+
+ // 应用动态过滤
+ if (condition?.Filters != null && condition.Filters.Any())
+ {
+ query = query.ApplyConditionFilters(condition);
+ }
+
+ // 应用分页和排序
+ pagingParams ??= new PagingParams();
+
+ var page = await query.ToPagedListAsync(pagingParams);
+
+
+ return page;
+ }
+
+
+
+
}
public class PagedResult
{
@@ -181,9 +212,18 @@ namespace TaskManager.EntityFramework.Repository
return query;
}
+ public static IQueryable ApplyConditionFilters(this IQueryable query, Condition condition)
+ {
+ if (condition.Filters == null || !condition.Filters.Any()) return query;
+
+ query = query.Where(condition.Filters.ToLambda());
+
+ return query;
+ }
+
- public static IQueryable ApplyStringFilter(this IQueryable query,
+ public static IQueryable ApplyStringFilter(this IQueryable query,
string propertyName, string value)
{
var property = typeof(T).GetProperty(propertyName,
diff --git a/API/Wood.Service/Controllers/CheryRecurringJobBaseController.cs b/API/Wood.Service/Controllers/CheryRecurringJobBaseController.cs
index cc3fccb..9e39ff9 100644
--- a/API/Wood.Service/Controllers/CheryRecurringJobBaseController.cs
+++ b/API/Wood.Service/Controllers/CheryRecurringJobBaseController.cs
@@ -30,7 +30,7 @@ namespace TaskManager.Controllers
protected string appSecret = "48edc4425647425d87f806a1ba492580";
protected readonly HttpClient _httpClient;
protected readonly JobDbContext _jobDbContext;
- protected string Client { set; get; } = "Wood";
+ protected string Client { set; get; } = "Chery";
protected string Path { set; get; } = "/v2/get/supplierProPlaning";
protected string Url { set; get; } = "/v2/get/supplierProPlaning";
protected virtual string TaskName { set; get; } = "SupplierProPlaning";
diff --git a/API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs b/API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs
index 82fc756..3accf55 100644
--- a/API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs
+++ b/API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs
@@ -19,6 +19,7 @@ using TaskManager.Contracts.Dtos;
using TaskManager.Entity;
using TaskManager.EntityFramework;
using TaskManager.EntityFramework.Repository;
+using Wood.Util.Filters;
using static Dapper.SqlMapper;
namespace TaskManager.Controllers
@@ -145,13 +146,13 @@ namespace TaskManager.Controllers
await _logger.AddError("任务名称或客户端不能为空",taskName);
return;
}
- var sublist = _jobDbContext.TaskSub.Where(p => p.TaskName == taskName && p.WriteState == false && p.Subscriber == client).ToList();
+ var sublist = _jobDbContext.TaskSub.Where(p => p.TaskName == taskName && p.WriteState == false && p.Subscriber == client ).ToList();
int pageSize = 1000;
if (!sublist.Any())
{
foreach (var sub in sublist)
{
- string querystr = $"select * from {sub.TableName} where TaskId='{sub.TaskId}' and WriteState=0 order by uid";//任务表
+ string querystr = $"select * from {sub.TableName} where TaskId='{sub.TaskId}' and WriteState=0 and ReadState=1 order by uid";//任务表
var entites = _jobDbContext.Database.GetDbConnection().Query(querystr);//明细表
if (entites.Any())
@@ -164,7 +165,7 @@ namespace TaskManager.Controllers
var records = entites.Skip((i - 1) * pageSize)
.Take(pageSize).ToList();
- #region dto转换作为参数发给
+ #region dto转换作为参数发给客户API 因为实体比DTO字段多
List dtos = new List();
foreach (var itm in records)
{
@@ -254,54 +255,106 @@ 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)
+ //[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
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task>> GetDataPaged(RequestInputBase input)
{
var pagingParams = new PagingParams
{
- PageNumber = pageNumber,
- PageSize = pageSize,
- SortBy = sortBy,
- IsAscending = isAscending,
- Filters = filters
+ PageNumber = input.pageNumber,
+ PageSize = input.pageSize,
+ SortBy = input.sortBy,
+ IsAscending = input.isAscending,
};
// 可以在这里构建表达式树过滤条件
Expression> filter = null;
- var pagedResult = await _repository.GetPagedAsync(filter, pagingParams);
+ var pagedResult = await _repository.GetDataPagedAsync(filter, pagingParams, input.Condition);
return Ok(pagedResult);
}
- [HttpGet]
- public async Task Export([FromQuery] int pageNumber = 1,
- [FromQuery] int pageSize = 10,
- [FromQuery] string sortBy = "",
- [FromQuery] bool isAscending = true,
- [FromQuery] Dictionary filters = null)
+ ///
+ /// 导出New
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task ExportData(RequestInputBase input)
{
var pagingParams = new PagingParams
{
- PageNumber = pageNumber,
- PageSize = pageSize,
- SortBy = sortBy,
- IsAscending = isAscending,
- Filters = filters
+ PageNumber = input.pageNumber,
+ PageSize = input.pageSize,
+ SortBy = input.sortBy,
+ IsAscending = input.isAscending,
+
};
// 可以在这里构建表达式树过滤条件
//Expression> filter = null;
- var pagedResult = await _repository.GetPagedAsync(null, pagingParams);
+ var pagedResult = await _repository.GetDataPagedAsync(null, pagingParams, input.Condition);
return await ExportFile(pagedResult.Data, Guid.NewGuid().ToString() + ".xlsx");
+ }
- }
+
+
+
+
+ // [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");
+
+
+ // }
protected async Task ExportFile(ICollection dtos, string fileName)
{
var excelExporter = HttpContext.RequestServices.GetRequiredService();
diff --git a/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs b/API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs
index 397557b..bdedc2d 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,14 +7,21 @@ 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;
+using Wood.Util.Filters;
namespace TaskManager.Controllers
{
@@ -31,10 +34,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 +84,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 +120,10 @@ namespace TaskManager.Controllers
}
}
- _jobDbContext.BulkInsert(pagefirstList);
- await CreateTaskAsync(pagefirstList,_jobDbContext);
+ if (pagefirstList.Any())
+ {
+ await InsertDataAsync(pagefirstList);
+ }
// 计算总页数
@@ -110,7 +139,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 +149,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 +162,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 +214,6 @@ namespace TaskManager.Controllers
}
else
{
-
foreach (var itm in firstResponse.Data.Rows)
{
T entity = new T();
@@ -201,8 +223,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 +255,6 @@ namespace TaskManager.Controllers
}
else
{
-
foreach (var itm in pageResponse.Data.Rows)
{
T entity = new T();
@@ -241,9 +264,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 +282,8 @@ namespace TaskManager.Controllers
}
}
-
// 首次请求获取总条数和分页信息
-
-
return allData;
}
@@ -403,30 +426,54 @@ namespace TaskManager.Controllers
/// 正序还是倒序
/// 过滤条件
///
- [HttpGet]
- public async Task GetPaged(
- [FromQuery] int pageNumber = 1,
- [FromQuery] int pageSize = 10,
- [FromQuery] string sortBy = "",
- [FromQuery] bool isAscending = true,
- [FromQuery] Dictionary filters = null)
+ //[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
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task>> GetDataPaged(RequestInputBase input)
{
var pagingParams = new PagingParams
{
- PageNumber = pageNumber,
- PageSize = pageSize,
- SortBy = sortBy,
- IsAscending = isAscending,
- Filters = filters
+ PageNumber = input.pageNumber,
+ PageSize = input.pageSize,
+ SortBy = input.sortBy,
+ IsAscending = input.isAscending,
};
// 可以在这里构建表达式树过滤条件
Expression> filter = null;
- var pagedResult = await _repository.GetPagedAsync(filter, pagingParams);
- return Ok(pagedResult);
+ var pagedResult = await _repository.GetDataPagedAsync(filter, pagingParams, input.Condition);
+ return Ok(pagedResult);
}
+
///
/// 导出
///
@@ -437,30 +484,56 @@ 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)
+ // [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
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task ExportData(RequestInputBase input)
{
var pagingParams = new PagingParams
{
- PageNumber = pageNumber,
- PageSize = pageSize,
- SortBy = sortBy,
- IsAscending = isAscending,
- Filters = filters
+ PageNumber = input.pageNumber,
+ PageSize = input.pageSize,
+ SortBy = input.sortBy,
+ IsAscending = input.isAscending,
+
};
// 可以在这里构建表达式树过滤条件
//Expression> filter = null;
- var pagedResult = await _repository.GetPagedAsync(null, pagingParams);
+ var pagedResult = await _repository.GetDataPagedAsync(null, pagingParams, input.Condition);
return await ExportFile(pagedResult.Data, Guid.NewGuid().ToString() + ".xlsx");
-
-
}
+
protected async Task ExportFile(ICollection dtos, string fileName)
{
var excelExporter = HttpContext.RequestServices.GetRequiredService();
diff --git a/API/Wood.Service/Controllers/CherySupplierConDateService.cs b/API/Wood.Service/Controllers/CherySupplierConDateService.cs
index f621d30..ff3f455 100644
--- a/API/Wood.Service/Controllers/CherySupplierConDateService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierConDateService.cs
@@ -1,15 +1,77 @@
-using TaskManager.Contracts.Dtos;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore.Storage;
+using TaskManager.Contracts.Dtos;
+using TaskManager.Entity;
using TaskManager.Entity.Entitys;
using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- public class SupplierConDateService : CheryRecurringJobInputPageController
+ ///
+ /// 日物料需求计划风险确认
+ ///
+ public class CherySupplierConDateService : CheryRecurringJobInputPageController
{
- public SupplierConDateService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
+ public CherySupplierConDateService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
{
}
-
+ ///
+ /// 确认提交
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task Confirm([FromBody] List entites)
+ {
+
+ var taskId = Guid.NewGuid();
+ var task = new TaskSub();
+ task.TaskId = taskId;
+ task.TaskName = "采购订单风险确认";
+ task.Subscriber = Client;
+ task.TableName = "SUPPLIER_CON_DATE";
+ task.DataCount = entites.Count;
+ task.Domain = "1";
+ task.Site = "1";
+ task.FailedCount = 0;
+ task.CreateTime = DateTime.Now;
+ task.CreateUser = "admin";
+ task.CreationTime = DateTime.Now;
+
+ task.SyncedPageCount = 0;
+
+ entites.ForEach(p =>
+ {
+ p.ReadState = true;
+ p.TaskId = taskId;
+
+
+ });
+
+ using (var transaction = await _jobDbContext.Database.BeginTransactionAsync())
+ {
+ var tran = transaction.GetDbTransaction();
+ try
+ {
+ await _jobDbContext.BulkUpdateAsync(entites, options => { options.Transaction = tran; });
+ await _jobDbContext.AddAsync(task);
+ _jobDbContext.SaveChanges();
+
+ // 提交事务
+ await transaction.CommitAsync();
+ }
+ catch (Exception ex)
+ {
+ await transaction.RollbackAsync();
+ return new JsonResult(new { Code = 400, Message = ex.Message });
+ }
+ }
+
+ return new JsonResult(new { Code = 200, Message = "修改成功!" });
+
+
+ }
+
}
diff --git a/API/Wood.Service/Controllers/CherySupplierConMmrpService.cs b/API/Wood.Service/Controllers/CherySupplierConMmrpService.cs
index 988869a..d01c45f 100644
--- a/API/Wood.Service/Controllers/CherySupplierConMmrpService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierConMmrpService.cs
@@ -1,12 +1,80 @@
-using TaskManager.Entity.Entitys;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Storage;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
+using Org.BouncyCastle.Bcpg.Sig;
+using SkiaSharp;
+using System.Xml;
+using TaskManager.Entity;
+using TaskManager.Entity.Entitys;
using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
+ ///
+ /// M+6月物料需求计划风险确认
+ ///
public class CherySupplierConMmrpService : CheryRecurringJobInputPageController
{
public CherySupplierConMmrpService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
{
}
+ ///
+ /// 审批通过
+ ///
+ ///
+ ///
+ public async Task Confirm([FromBody] List entites)
+ {
+
+ var taskId = Guid.NewGuid();
+ var task = new TaskSub();
+ task.TaskId = taskId;
+ task.TaskName = "";
+ task.Subscriber = Client;
+ task.TableName = "SUPPLIER_CON_MMRP";
+ task.DataCount = entites.Count;
+ task.Domain = "1";
+ task.Site = "1";
+ task.FailedCount = 0;
+ task.CreateTime = DateTime.Now;
+ task.CreateUser = "admin";
+ task.CreationTime = DateTime.Now;
+ task.SyncedPageCount = 0;
+
+ entites.ForEach(p =>
+ {
+ p.ReadState = true;
+ p.TaskId = taskId;
+
+
+ });
+
+ using (var transaction = await _jobDbContext.Database.BeginTransactionAsync())
+ {
+ var tran = transaction.GetDbTransaction();
+ try
+ {
+ await _jobDbContext.BulkUpdateAsync(entites, options => { options.Transaction = tran; });
+ await _jobDbContext.AddAsync(task);
+ _jobDbContext.SaveChanges();
+
+ // 提交事务
+ await transaction.CommitAsync();
+ }
+ catch (Exception ex)
+ {
+ await transaction.RollbackAsync();
+ return new JsonResult(new { Code = 400, Message = ex.Message });
+ }
+ }
+
+ return new JsonResult(new { Code = 200, Message = "修改成功!" });
+
+
+ }
+
+
+
}
}
diff --git a/API/Wood.Service/Controllers/CherySupplierConPoService.cs b/API/Wood.Service/Controllers/CherySupplierConPoService.cs
new file mode 100644
index 0000000..162e573
--- /dev/null
+++ b/API/Wood.Service/Controllers/CherySupplierConPoService.cs
@@ -0,0 +1,76 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore.Storage;
+using TaskManager.Contracts.Dtos;
+using TaskManager.Entity;
+using TaskManager.Entity.Entitys;
+using TaskManager.EntityFramework;
+
+namespace TaskManager.Controllers
+{
+ ///
+ /// 采购订单风险确认
+ ///
+ public class CherySupplierConPoService : CheryRecurringJobInputPageController
+ {
+ public CherySupplierConPoService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
+ {
+ }
+ ///
+ /// 确认提交
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task Confirm([FromBody] List entites)
+ {
+
+ var taskId = Guid.NewGuid();
+ var task = new TaskSub();
+ task.TaskId = taskId;
+ task.TaskName = TaskName;
+ task.Subscriber = Client;
+ task.TableName = "SUPPLIER_CON_PO";
+ task.DataCount = entites.Count;
+ task.Domain = "1";
+ task.Site = "1";
+ task.FailedCount = 0;
+ task.CreateTime = DateTime.Now;
+ task.CreateUser = "admin";
+ task.CreationTime = DateTime.Now;
+ task.SyncedPageCount = 0;
+
+ entites.ForEach(p =>
+ {
+ p.ReadState = true;
+ p.TaskId = taskId;
+
+ });
+
+ using (var transaction = await _jobDbContext.Database.BeginTransactionAsync())
+ {
+ var tran = transaction.GetDbTransaction();
+ try
+ {
+ await _jobDbContext.BulkUpdateAsync(entites, options => { options.Transaction = tran; });
+ await _jobDbContext.AddAsync(task);
+ _jobDbContext.SaveChanges();
+
+ // 提交事务
+ await transaction.CommitAsync();
+ }
+ catch (Exception ex)
+ {
+ await transaction.RollbackAsync();
+ return new JsonResult(new { Code = 400, Message = ex.Message });
+ }
+ }
+ return new JsonResult(new { Code = 200, Message = "修改成功!" });
+ }
+
+
+
+
+
+
+ }
+}
diff --git a/API/Wood.Service/Controllers/CherySupplierDelStateService.cs b/API/Wood.Service/Controllers/CherySupplierDelStateService.cs
index 7831d32..4b38ef9 100644
--- a/API/Wood.Service/Controllers/CherySupplierDelStateService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierDelStateService.cs
@@ -6,7 +6,9 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- //看板配送单
+ ///
+ /// 看板送货单
+ ///
public class CherySupplierDelStateService : CheryRecurringJobOutPageController
{
public CherySupplierDelStateService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierInvDataService.cs b/API/Wood.Service/Controllers/CherySupplierInvDataService.cs
index 81bcf52..4697e70 100644
--- a/API/Wood.Service/Controllers/CherySupplierInvDataService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierInvDataService.cs
@@ -6,7 +6,10 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- //奇瑞RDC共享库存
+
+ ///
+ /// 奇瑞RDC共享库存
+ ///
public class SupplierInvDataService : CheryRecurringJobOutPageController
{
public SupplierInvDataService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierMrpDataService.cs b/API/Wood.Service/Controllers/CherySupplierMrpDataService.cs
index 884a267..6a6c10e 100644
--- a/API/Wood.Service/Controllers/CherySupplierMrpDataService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierMrpDataService.cs
@@ -1,16 +1,79 @@
-using TaskManager.Contracts.Dtos;
+using System.Data.Common;
+using TaskManager.Contracts.Dtos;
using TaskManager.Controllers;
using TaskManager.Entity;
+using TaskManager.Entity.Entitys;
using TaskManager.EntityFramework;
using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- //日物料需求计划
+
+ ///
+ /// 日物料需求计划
+ ///
public class CherySupplierMrpDataService : CheryRecurringJobOutPageController
{
public CherySupplierMrpDataService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
{
}
+ protected override async Task ConfirmDataInsertAsync(List plist, JobDbContext dbContext, DbTransaction dbTransaction)
+ {
+ if (plist.Count > 0)
+ {
+ List list = new List();
+ plist.ForEach(p =>
+ {
+ var con = new SUPPLIER_CON_DATE();
+ con.SupplierCode = "8EG";
+ con.ReleaseEdition = p.ReleaseEdition;
+ con.MaterialCode = p.MaterialCode;
+ con.PlantId = p.PlantId;
+ con.FeedbackResults = "";
+ con.VentureType = "";
+ con.VentureSpecific = "";
+ con.Measures = "";
+ con.StartDate = p.StartDate.ToString();
+ con.QuantityMeet1 =p.QuantityDemand1 ;
+ con.QuantityMeet2 =p.QuantityDemand2 ;
+ con.QuantityMeet3 =p.QuantityDemand3 ;
+ con.QuantityMeet4 =p.QuantityDemand4 ;
+ con.QuantityMeet5 =p.QuantityDemand5 ;
+ con.QuantityMeet6 =p.QuantityDemand6 ;
+ con.QuantityMeet7 =p.QuantityDemand7 ;
+ con.QuantityMeet8 =p.QuantityDemand8 ;
+ con.QuantityMeet9 =p.QuantityDemand9 ;
+ con.QuantityMeet10 =p.QuantityDemand10 ;
+ con.QuantityMeet11 =p.QuantityDemand11 ;
+ con.QuantityMeet12 =p.QuantityDemand12 ;
+ con.QuantityMeet13 =p.QuantityDemand13 ;
+ con.QuantityMeet14 =p.QuantityDemand14 ;
+ con.QuantityMeet15 =p.QuantityDemand15 ;
+ con.QuantityMeet16 =p.QuantityDemand16 ;
+ con.QuantityMeet17 =p.QuantityDemand17 ;
+ con.QuantityMeet18 =p.QuantityDemand18 ;
+ con.QuantityMeet19 =p.QuantityDemand19 ;
+ con.QuantityMeet20 =p.QuantityDemand20 ;
+ con.QuantityMeet21 =p.QuantityDemand21 ;
+ con.QuantityMeet22 =p.QuantityDemand22 ;
+ con.QuantityMeet23 =p.QuantityDemand23 ;
+ con.QuantityMeet24 =p.QuantityDemand24 ;
+ con.QuantityMeet25 =p.QuantityDemand25 ;
+ con.QuantityMeet26 =p.QuantityDemand26 ;
+ con.QuantityMeet27 =p.QuantityDemand27 ;
+ con.QuantityMeet28 =p.QuantityDemand28 ;
+ con.QuantityMeet29 =p.QuantityDemand29 ;
+ con.QuantityMeet30 =p.QuantityDemand30 ;
+ con.QuantityMeet31 = p.QuantityDemand31;
+ list.Add(con);
+ });
+
+ await dbContext.BulkInsertAsync(list, options => { options.Transaction = dbTransaction; options.UseTableLock = false; });
+ }
+ return;
+ }
+
+
+
}
}
diff --git a/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs b/API/Wood.Service/Controllers/CherySupplierMrpMonthService.cs
index 150fc9d..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,15 +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)
{
- var taskId = Guid.NewGuid();
- var task = new TaskSub();
- task.TaskId = taskId;
- task.TaskName = TaskName;
- task.Subscriber = Client;
- task.TableName = "SUPPLIER_CON_MMRP";
if (plist.Count > 0)
{
List list = new List();
@@ -56,9 +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;
}
+
+
}
}
diff --git a/API/Wood.Service/Controllers/CherySupplierMrpService.cs b/API/Wood.Service/Controllers/CherySupplierMrpService.cs
index bbef44b..5d1c1c2 100644
--- a/API/Wood.Service/Controllers/CherySupplierMrpService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierMrpService.cs
@@ -6,7 +6,10 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- //日MRP状态监控
+
+ ///
+ /// 日MRP状态监控
+ ///
public class CherySupplierMrpService : CheryRecurringJobOutPageController
{
public CherySupplierMrpService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierMrpWarningService.cs b/API/Wood.Service/Controllers/CherySupplierMrpWarningService.cs
index 30e52e2..19fe162 100644
--- a/API/Wood.Service/Controllers/CherySupplierMrpWarningService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierMrpWarningService.cs
@@ -7,6 +7,10 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
//日MRP预警推移
+
+ ///
+ /// 日MRP预警推移
+ ///
public class CherySupplierMrpWarningService : CheryRecurringJobOutPageController
{
public CherySupplierMrpWarningService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierPoService.cs b/API/Wood.Service/Controllers/CherySupplierPoService.cs
index dc618bf..c7ac08b 100644
--- a/API/Wood.Service/Controllers/CherySupplierPoService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierPoService.cs
@@ -1,15 +1,75 @@
-using TaskManager.Contracts.Dtos;
+using System.Data.Common;
+using TaskManager.Contracts.Dtos;
using TaskManager.Controllers;
using TaskManager.Entity;
+using TaskManager.Entity.Entitys;
using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
+ ///
+ /// 采购订单
+ ///
public class CherySupplierPoService : CheryRecurringJobOutPageController
{
public CherySupplierPoService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
{
}
+ protected override async Task ConfirmDataInsertAsync(List plist, JobDbContext dbContext, DbTransaction dbTransaction)
+ {
+ if (plist.Count > 0)
+ {
+ List list = new List();
+ plist.ForEach(p =>
+ {
+ var con = new SUPPLIER_CON_PO();
+
+ con.SupplierCode = "8EG";
+ con.PurchaseOrder =p.PurchaseOrder ;
+ con.SerialNumber =p.SerialNumber ;
+ con.QuantityMeet =p.QuantityDelivery ;
+ con.FeedbackResults ="" ;
+ con.VentureType ="" ;
+ con.VentureSpecific ="" ;
+ con.Measures ="";
+
+
+
+
+
+ //con.SupplierCode = "8EG";
+ //con.ReleaseEdition = p.ReleaseEdition;
+ //con.MaterialCode = p.MaterialCode;
+ //con.PlantId = p.PlantId;
+ //con.FeedbackResults = "0";
+ //con.VentureType = "1";
+ //con.VentureSpecific = "1";
+ //con.Measures = "1";
+ //con.StartMonth = p.StartMonth;
+ //con.QuantityMeet1 = p.QuantityDemand1;
+ //con.QuantityMeet2 = p.QuantityDemand2;
+ //con.QuantityMeet3 = p.QuantityDemand3;
+ //con.QuantityMeet4 = p.QuantityDemand4;
+ //con.QuantityMeet5 = p.QuantityDemand5;
+ //con.QuantityMeet6 = p.QuantityDemand6;
+ //con.QuantityMeet7 = p.QuantityDemand7;
+ //con.QuantityMeet8 = p.QuantityDemand8;
+ //con.QuantityMeet9 = p.QuantityDemand9;
+ //con.QuantityMeet10 = p.QuantityDemand10;
+ //con.QuantityMeet11 = p.QuantityDemand11;
+ //con.QuantityMeet12 = p.QuantityDemand12;
+ list.Add(con);
+ });
+
+ await dbContext.BulkInsertAsync(list, options => { options.Transaction = dbTransaction; options.UseTableLock = false; });
+ }
+ return;
+ }
+
+
+
+
+
}
}
diff --git a/API/Wood.Service/Controllers/CherySupplierPorHSCHEDULService.cs b/API/Wood.Service/Controllers/CherySupplierPorHSCHEDULService.cs
index f0a0ae2..80a1461 100644
--- a/API/Wood.Service/Controllers/CherySupplierPorHSCHEDULService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierPorHSCHEDULService.cs
@@ -5,7 +5,10 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- //过焊装未过总装
+
+ ///
+ /// 过焊装未过总装
+ ///
public class CherySupplierPorHSCHEDULService : CheryRecurringJobOutPageController
{
public CherySupplierPorHSCHEDULService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierProCSCHEDULService.cs b/API/Wood.Service/Controllers/CherySupplierProCSCHEDULService.cs
index 1280504..c7b9b9e 100644
--- a/API/Wood.Service/Controllers/CherySupplierProCSCHEDULService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierProCSCHEDULService.cs
@@ -6,6 +6,9 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
+ ///
+ /// 排序供货
+ ///
public class CherySupplierProCSCHEDULService : CheryRecurringJobOutPageController
{
public CherySupplierProCSCHEDULService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierProPlanService.cs b/API/Wood.Service/Controllers/CherySupplierProPlanService.cs
index 851af3c..1ad091a 100644
--- a/API/Wood.Service/Controllers/CherySupplierProPlanService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierProPlanService.cs
@@ -6,6 +6,9 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
//整车月度生产计划
+ ///
+ /// 整车月度生产计划
+ ///
public class SupplierProPlaningService : CheryRecurringJobOutPageController
{
public SupplierProPlaningService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierProTSCHEDULService.cs b/API/Wood.Service/Controllers/CherySupplierProTSCHEDULService.cs
index fa30e32..69465e9 100644
--- a/API/Wood.Service/Controllers/CherySupplierProTSCHEDULService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierProTSCHEDULService.cs
@@ -5,7 +5,10 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- //过涂装未过总装
+
+ ///
+ /// 过涂装未过总装
+ ///
public class CherySupplierProTSCHEDULService : CheryRecurringJobOutPageController
{
public CherySupplierProTSCHEDULService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierReturnService.cs b/API/Wood.Service/Controllers/CherySupplierReturnService.cs
index 4f80b7c..3e0d26e 100644
--- a/API/Wood.Service/Controllers/CherySupplierReturnService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierReturnService.cs
@@ -5,7 +5,10 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- //退货单
+
+ ///
+ /// 退货单
+ ///
public class CherySupplierReturnService : CheryRecurringJobOutPageController
{
public CherySupplierReturnService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
diff --git a/API/Wood.Service/Controllers/CherySupplierSinvDataService.cs b/API/Wood.Service/Controllers/CherySupplierSinvDataService.cs
index 1f0887e..4a32a8d 100644
--- a/API/Wood.Service/Controllers/CherySupplierSinvDataService.cs
+++ b/API/Wood.Service/Controllers/CherySupplierSinvDataService.cs
@@ -6,7 +6,7 @@ using TaskManager.EntityFramework;
namespace TaskManager.Controllers
{
- public class CherySupplierSinvDataService : CheryRecurringJobOutPageController
+ public class CherySupplierSinvDataService : CheryRecurringJobInputPageController
{
public CherySupplierSinvDataService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository)
{
diff --git a/API/Wood.Service/Controllers/NormalBaseController.cs b/API/Wood.Service/Controllers/NormalBaseController.cs
index 1e23ea5..dad06d5 100644
--- a/API/Wood.Service/Controllers/NormalBaseController.cs
+++ b/API/Wood.Service/Controllers/NormalBaseController.cs
@@ -1,12 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Linq.Expressions;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Core.Extension;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Authorization;
@@ -14,11 +6,20 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
using TaskManager.Entity;
using TaskManager.EntityFramework;
using TaskManager.EntityFramework.Repository;
using Wood.Entity;
using Wood.Util;
+using Wood.Util.Filters;
namespace Wood.Service.Controllers
@@ -49,7 +50,7 @@ namespace Wood.Service.Controllers
///
///
[HttpGet("{id}")]
- public virtual async Task> GetById(int id)
+ public async Task> GetById(int id)
{
var entity = await _repository.GetByIdAsync(id);
if (entity == null) return NotFound();
@@ -62,7 +63,7 @@ namespace Wood.Service.Controllers
///
///
[HttpPost]
- public virtual async Task> Create(T entity)
+ public async Task> Create(T entity)
{
entity.CreationTime = DateTime.Now;
var createdEntity = await _repository.AddAsync(entity);
@@ -74,7 +75,7 @@ namespace Wood.Service.Controllers
///
///
[HttpPut("{id}")]
- public virtual async Task Update(T entity)
+ public async Task Update(T entity)
{
var _first = await _repository.GetByIdAsync(entity.UId);
if (_first == null)
@@ -92,82 +93,131 @@ namespace Wood.Service.Controllers
///
///
[HttpDelete("{id}")]
- public virtual async Task Delete(int id)
+ public async Task Delete(int id)
{
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
///
- ///
- ///
- ///
- ///
- ///
+ ///
///
- [HttpGet]
- public virtual async Task GetPaged(
- [FromQuery] int pageNumber = 1,
- [FromQuery] int pageSize = 10,
- [FromQuery] string sortBy = "",
- [FromQuery] bool isAscending = true,
- [FromQuery] Dictionary filters = null)
+ [HttpPost]
+ public async Task>> GetDataPaged(RequestInputBase input)
{
var pagingParams = new PagingParams
{
- PageNumber = pageNumber,
- PageSize = pageSize,
- SortBy = sortBy,
- IsAscending = isAscending,
- Filters = filters
+ PageNumber = input.pageNumber,
+ PageSize = input.pageSize,
+ SortBy = input.sortBy,
+ IsAscending = input.isAscending,
};
// 可以在这里构建表达式树过滤条件
Expression> filter = null;
- var pagedResult = await _repository.GetPagedAsync(filter, pagingParams);
+ var pagedResult = await _repository.GetDataPagedAsync(filter, pagingParams, input.Condition);
return Ok(pagedResult);
}
+
///
- /// 导出
+ /// 导出New
///
- ///
- ///
- ///
- ///
- ///
+ ///
///
-
- [HttpGet]
- public virtual async Task Export([FromQuery] int pageNumber = 1,
- [FromQuery] int pageSize = 10,
- [FromQuery] string sortBy = "",
- [FromQuery] bool isAscending = true,
- [FromQuery] Dictionary filters = null)
+ [HttpPost]
+ public async Task ExportData(RequestInputBase input)
{
var pagingParams = new PagingParams
{
- PageNumber = pageNumber,
- PageSize = pageSize,
- SortBy = sortBy,
- IsAscending = isAscending,
- Filters = filters
+ PageNumber = input.pageNumber,
+ PageSize = input.pageSize,
+ SortBy = input.sortBy,
+ IsAscending = input.isAscending,
+
};
// 可以在这里构建表达式树过滤条件
//Expression> filter = null;
- var pagedResult = await _repository.GetPagedAsync(null, pagingParams);
+ var pagedResult = await _repository.GetDataPagedAsync(null, pagingParams, input.Condition);
return await ExportFile(pagedResult.Data, Guid.NewGuid().ToString() + ".xlsx");
+ }
- }
+
+ // ///
+ // /// 导出
+ // ///
+ // ///
+ // ///
+ // ///
+ // ///
+ // ///
+ // ///
+
+ // [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");
+
+
+ // }
protected async Task ExportFile(ICollection dtos, string fileName)
{
var excelExporter = HttpContext.RequestServices.GetRequiredService();
diff --git a/API/Wood.Service/Controllers/SupplierPoService.cs b/API/Wood.Service/Controllers/SupplierPoService.cs
deleted file mode 100644
index 535dcbf..0000000
--- a/API/Wood.Service/Controllers/SupplierPoService.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace TaskManager.Controllers
-{
- public class SupplierPoService
- {
- }
-}
diff --git a/API/Wood.Service/Controllers/TaskConifgureController.cs b/API/Wood.Service/Controllers/TaskConifgureController.cs
index 81ba2cf..4ed0720 100644
--- a/API/Wood.Service/Controllers/TaskConifgureController.cs
+++ b/API/Wood.Service/Controllers/TaskConifgureController.cs
@@ -529,7 +529,7 @@ namespace TaskManager.Controllers
);
break;
case "日物料需求计划风险确认":
- RecurringJob.AddOrUpdate(
+ RecurringJob.AddOrUpdate(
task.TaskName,
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client),
task.Corn,
@@ -537,7 +537,7 @@ namespace TaskManager.Controllers
);
break;
case "采购订单风险确认":
- RecurringJob.AddOrUpdate(
+ RecurringJob.AddOrUpdate(
task.TaskName,
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client),
task.Corn,
diff --git a/API/Wood.Util/EntityHelper.cs b/API/Wood.Util/EntityHelper.cs
index d0ddf9e..f5d26fa 100644
--- a/API/Wood.Util/EntityHelper.cs
+++ b/API/Wood.Util/EntityHelper.cs
@@ -13,62 +13,62 @@ 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);
- }
- }
+ //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);
+ // }
+ //}
//public static class DataTableHelper
diff --git a/API/Wood.Util/Filters/Condition.cs b/API/Wood.Util/Filters/Condition.cs
new file mode 100644
index 0000000..a3a1a59
--- /dev/null
+++ b/API/Wood.Util/Filters/Condition.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Wood.Util.Filters
+{
+ public class Condition
+ {
+ public ICollection Filters { get; set; } = new List();
+ }
+}
diff --git a/API/Wood.Util/Filters/EnumFilterAction.cs b/API/Wood.Util/Filters/EnumFilterAction.cs
new file mode 100644
index 0000000..385480f
--- /dev/null
+++ b/API/Wood.Util/Filters/EnumFilterAction.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Wood.Util.Filters
+{
+ ///
+ /// 过滤条件
+ ///
+ public enum EnumFilterAction
+ {
+ ///
+ /// equal
+ ///
+ [Description("等于")] Equal = 0,
+
+ ///
+ /// Not equal
+ ///
+ [Description("不等于")] NotEqual = 1,
+
+ ///
+ /// Bigger
+ ///
+ [Description("大于")] BiggerThan = 2,
+
+ ///
+ /// Smaller
+ ///
+ [Description("小于")] SmallThan = 3,
+
+ ///
+ /// Bigger or equal
+ ///
+ [Description("大于等于")] BiggerThanOrEqual = 4,
+
+ ///
+ /// Small or equal
+ ///
+ [Description("小于等于")] SmallThanOrEqual = 5,
+
+ ///
+ /// Like
+ ///
+ [Description("类似于")] Like = 6,
+
+ ///
+ /// Not like
+ ///
+ [Description("不类似于")] NotLike = 7,
+
+ ///
+ /// Contained in
+ /// List items = new List();
+ /// string value = JsonSerializer.Serialize(items);//转成Json字符串
+ ///FilterCondition filterCondition = new FilterCondition() { Column = "Name", Value = value, Action = EnumFilterAction.In, Logic = EnumFilterLogic.And };
+ ///
+ [Description("包含于")] In = 8,
+
+ ///
+ /// Not contained in
+ ///
+ [Description("不包含于")] NotIn = 9,
+ }
+
+}
diff --git a/API/Wood.Util/Filters/EnumFilterLogic.cs b/API/Wood.Util/Filters/EnumFilterLogic.cs
new file mode 100644
index 0000000..8075b69
--- /dev/null
+++ b/API/Wood.Util/Filters/EnumFilterLogic.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Wood.Util.Filters
+{
+ public enum EnumFilterLogic
+ {
+ ///
+ /// 与
+ ///
+ And = 0,
+
+ ///
+ /// 或
+ ///
+ Or = 1
+ }
+}
diff --git a/API/Wood.Util/Filters/Filter.cs b/API/Wood.Util/Filters/Filter.cs
new file mode 100644
index 0000000..ce792fc
--- /dev/null
+++ b/API/Wood.Util/Filters/Filter.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Wood.Util.Filters
+{
+ public class Filter
+ {
+ public Filter()
+ {
+ Logic = "And";
+ }
+
+ public Filter(string column, string value,
+ string action = "==",
+ string logic = "And")
+ {
+ Column = column;
+ Action = action;
+ Value = value;
+ Logic = logic;
+ }
+
+ ///
+ /// 过滤条件之间的逻辑关系:AND和OR
+ ///
+ public string Logic { get; set; } = "And";
+
+ ///
+ /// 过滤条件中使用的数据列
+ ///
+ public string Column { get; set; }
+
+ ///
+ /// 过滤条件中的操作:==,!=,>,<,>=,<=,In,NotIn,Like,NotLike
+ /// Equal、NotEqual、BiggerThan、SmallThan、BiggerThanOrEqual、SmallThanOrEqual、In、NotIn
+ ///
+ public string Action { get; set; } = "==";
+
+ ///
+ /// 过滤条件中的操作的值
+ ///
+ public string Value { get; set; }
+ }
+
+}
diff --git a/API/Wood.Util/Filters/FilterExtensions.cs b/API/Wood.Util/Filters/FilterExtensions.cs
new file mode 100644
index 0000000..b2ccfb6
--- /dev/null
+++ b/API/Wood.Util/Filters/FilterExtensions.cs
@@ -0,0 +1,337 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Text.Json;
+using System.Threading.Tasks;
+
+namespace Wood.Util.Filters
+{
+ public static class FilterExtensions
+ {
+ public static Expression> ToLambda(this string jsonFilter)
+ {
+ if (string.IsNullOrWhiteSpace(jsonFilter))
+ {
+ return p => true;
+ }
+
+ var filterConditions = JsonSerializer.Deserialize>(jsonFilter);
+ return filterConditions.ToLambda();
+ }
+
+ public static Expression> ToLambda(this Filter filter)
+ {
+ var filterConditions = new List { filter };
+ return filterConditions.ToLambda();
+ }
+
+ public static Expression> ToLambda(this ICollection filterConditionList)
+ {
+ Expression> condition = null;
+ try
+ {
+ if (!filterConditionList.Any())
+ {
+ //创建默认表达式
+ return p => true;
+ }
+
+ foreach (var filterCondition in filterConditionList)
+ {
+ var tempCondition = CreateLambda(filterCondition);
+ if (condition == null)
+ {
+ condition = tempCondition;
+ }
+ else
+ {
+ condition = filterCondition.Logic switch
+ {
+ "And" => condition.And(tempCondition),
+ "Or" => condition.Or(tempCondition),
+ _ => condition
+ };
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"获取筛选条件异常:{ex.Message}");
+ }
+
+ return condition;
+ }
+
+ private static Expression> CreateLambda(Filter filter)
+ {
+ Expression> expression = p => false;
+ try
+ {
+ var parameter = Expression.Parameter(typeof(T), "p"); //创建参数p
+ var member = Expression.PropertyOrField(parameter, filter.Column); //创建表达式中的属性或字段
+ // var propertyType = member.Type; //取属性类型,常量constant按此类型进行转换
+ //var constant = Expression.Constant(filterCondition.Value);//创建常数
+
+ ConstantExpression constant = null;
+ if (filter.Action != "In" && filter.Action != "NotIn")
+ {
+ constant = CreateConstantExpression(member.Type, filter.Value);
+ }
+
+ switch (filter.Action.ToLower())
+ {
+ case "==":
+ expression = Expression.Lambda>(Expression.Equal(member, constant), parameter);
+ break;
+
+ case "!=":
+ expression = Expression.Lambda>(Expression.NotEqual(member, constant), parameter);
+ break;
+
+ case ">":
+ expression = Expression.Lambda>(Expression.GreaterThan(member, constant), parameter);
+ break;
+
+ case "<":
+ expression = Expression.Lambda>(Expression.LessThan(member, constant), parameter);
+ break;
+
+ case ">=":
+ expression = Expression.Lambda>(Expression.GreaterThanOrEqual(member, constant), parameter);
+ break;
+
+ case "<=":
+ expression = Expression.Lambda>(Expression.LessThanOrEqual(member, constant), parameter);
+ break;
+
+ case "like":
+ expression = GetExpressionLikeMethod("Contains", filter);
+ break;
+
+ case "notlike":
+ expression = GetExpressionNotLikeMethod("Contains", filter);
+ break;
+
+ case "in":
+ expression = GetExpressionInMethod("Contains", member.Type, filter);
+ break;
+
+ case "notin":
+ expression = GetExpressionNotInMethod("Contains", member.Type, filter);
+ break;
+
+ default:
+ break;
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
+ }
+
+ return expression;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private static ConstantExpression CreateConstantExpression(Type propertyType, string value)
+ {
+ ConstantExpression constant;
+ try
+ {
+ if (propertyType.IsGenericType &&
+ propertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
+ {
+ var objValue = Convert.ChangeType(value, propertyType.GetGenericArguments()[0], CultureInfo.InvariantCulture);
+ constant = Expression.Constant(objValue);
+ }
+ else if (propertyType.IsEnum)
+ {
+ var enumValue = (Enum)Enum.Parse(propertyType, value, true);
+ constant = Expression.Constant(enumValue);
+ }
+ else
+ {
+ constant = propertyType.Name switch
+ {
+ "Guid" => Expression.Constant(Guid.Parse(value)),
+ _ => Expression.Constant(Convert.ChangeType(value, propertyType, CultureInfo.InvariantCulture))
+ };
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"获取ConstantExpression异常:{ex.Message}");
+ }
+
+ return constant;
+ }
+
+ private static Expression> GetExpressionLikeMethod(string methodName, Filter filter)
+ {
+ var parameterExpression = Expression.Parameter(typeof(T), "p");
+ // MethodCallExpression methodExpression = GetMethodExpression(methodName, filterCondition.Column, filterCondition.Value, parameterExpression);
+ var methodExpression = GetMethodExpression(methodName, filter.Column, filter.Value,
+ parameterExpression);
+ return Expression.Lambda>(methodExpression, parameterExpression);
+ }
+
+ private static Expression> GetExpressionNotLikeMethod(string methodName, Filter filter)
+ {
+ var parameterExpression = Expression.Parameter(typeof(T), "p");
+ var methodExpression = GetMethodExpression(methodName, filter.Column, filter.Value,
+ parameterExpression);
+ var notMethodExpression = Expression.Not(methodExpression);
+ return Expression.Lambda>(notMethodExpression, parameterExpression);
+ }
+
+ ///
+ /// 生成guidList.Contains(p=>p.GUId);
+ /// 除String类型,其他类型涉及到类型转换.如GUID
+ ///
+ ///
+ /// Contains
+ /// PropertyType/typeof(GUId)
+ /// PropertyName/PropertyValue
+ ///
+ private static Expression> GetExpressionInMethod(string methodName, Type propertyType, Filter filter)
+ {
+ var parameterExpression = Expression.Parameter(typeof(T), "p");
+ Type lstType = typeof(List<>).MakeGenericType(propertyType);
+
+ //转换枚举
+ //if (propertyType.IsEnum)
+ //{
+ // var valueArrayStrings = JsonSerializer.Deserialize>(filter.Value);
+ // List