|
|
@ -205,6 +205,7 @@ namespace TaskManager.Controllers |
|
|
|
} |
|
|
|
|
|
|
|
[NonAction] |
|
|
|
|
|
|
|
public async Task SyncTaskSubTable(string taskName, string client) |
|
|
|
{ |
|
|
|
var version = DateTime.Now.ToString("yyyyMMdd"); |
|
|
@ -214,30 +215,38 @@ namespace TaskManager.Controllers |
|
|
|
await _logger.AddError("任务名称或客户端不能为空", taskName, Guid.NewGuid(), version); |
|
|
|
return; |
|
|
|
} |
|
|
|
var sublist = _jobDbContext.TaskSub.Where(p => taskName.Contains(p.TaskName) && p.WriteState == false && p.Subscriber == client).ToList(); |
|
|
|
|
|
|
|
var sublist = _jobDbContext.TaskSub |
|
|
|
.Where(p => taskName.Contains(p.TaskName) && p.WriteState == false && p.Subscriber == client) |
|
|
|
.ToList(); |
|
|
|
int pageSize = CPageSize; |
|
|
|
|
|
|
|
if (sublist.Any()) |
|
|
|
{ |
|
|
|
foreach (var sub in sublist) |
|
|
|
{ |
|
|
|
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<T>(querystr);//明细表
|
|
|
|
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<T>(querystr); |
|
|
|
|
|
|
|
if (entites.Any()) |
|
|
|
{ |
|
|
|
|
|
|
|
var total = entites.Count(); |
|
|
|
sub.DataCount = total; |
|
|
|
int totalPages = (int)Math.Ceiling((double)total / pageSize); |
|
|
|
int startPage = sub.SyncedPageCount == 0 ? 1 : sub.SyncedPageCount; |
|
|
|
|
|
|
|
int errorNumber = 0; |
|
|
|
List<string> errorlist=new List<string>(); |
|
|
|
int failedRecordCount = 0; // 新增:记录失败的总记录数
|
|
|
|
List<string> errorPages = new List<string>(); // 新增:记录失败的页码
|
|
|
|
|
|
|
|
for (int i = startPage; i <= totalPages; i++) |
|
|
|
{ |
|
|
|
int pageRecordCount = Math.Min(pageSize, total - (i - 1) * pageSize); // 计算当前页实际记录数
|
|
|
|
var records = entites.Skip((i - 1) * pageSize) |
|
|
|
.Take(pageSize).ToList(); |
|
|
|
#region dto转换作为参数发给客户API 因为实体比DTO字段多
|
|
|
|
.Take(pageRecordCount) |
|
|
|
.ToList(); |
|
|
|
|
|
|
|
#region dto转换作为参数发给客户API
|
|
|
|
List<TDTO> dtos = new List<TDTO>(); |
|
|
|
foreach (var itm in records) |
|
|
|
{ |
|
|
@ -254,16 +263,19 @@ namespace TaskManager.Controllers |
|
|
|
pageNum = i |
|
|
|
}; |
|
|
|
#endregion
|
|
|
|
|
|
|
|
foreach (var itm in records) |
|
|
|
{ |
|
|
|
itm.WriteState = true; |
|
|
|
itm.RequestDate = requestDate; |
|
|
|
} |
|
|
|
|
|
|
|
var result = await PostPageAsync(pagedRequest, sub.TaskId, version); |
|
|
|
if (result.code == 200) |
|
|
|
{ |
|
|
|
await _logger.AddSuccess($"第 {i} 页奇瑞数据保存成功", TaskName, sub.TaskId, version); |
|
|
|
_jobDbContext.BulkUpdate(records, options => options.UseTableLock = true); |
|
|
|
|
|
|
|
List<TLOGS> logs = new List<TLOGS>(); |
|
|
|
foreach (var itm in records) |
|
|
|
{ |
|
|
@ -276,6 +288,7 @@ namespace TaskManager.Controllers |
|
|
|
logs.Add(log); |
|
|
|
} |
|
|
|
_jobDbContext.BulkInsert(logs, options => options.UseTableLock = true); |
|
|
|
|
|
|
|
sub.SyncedPageCount = i; |
|
|
|
if (i == totalPages) |
|
|
|
{ |
|
|
@ -287,11 +300,12 @@ namespace TaskManager.Controllers |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
//sub.FailedCount = i * pageSize;
|
|
|
|
//sub.FailedInfo = $"第 {i} 页奇瑞数据保存失败 {result.message}。";
|
|
|
|
errorNumber++; |
|
|
|
failedRecordCount += pageRecordCount; // 累加失败的记录数
|
|
|
|
errorPages.Add($"第 {i} 页"); // 记录失败的页码
|
|
|
|
|
|
|
|
string inputjson = string.Empty; |
|
|
|
if (TaskName == "日物料需求计划风险确认")//格式特殊处理
|
|
|
|
if (TaskName == "日物料需求计划风险确认") |
|
|
|
{ |
|
|
|
inputjson = JsonSerializer.Serialize(pagedRequest, |
|
|
|
new JsonSerializerOptions |
|
|
@ -299,14 +313,13 @@ namespace TaskManager.Controllers |
|
|
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, |
|
|
|
Converters = |
|
|
|
{ |
|
|
|
new DecimalTrimConverter(), |
|
|
|
new InputCustomDateTimeConverter(), |
|
|
|
new InputCustomNullableDateTimeConverter() |
|
|
|
new DecimalTrimConverter(), |
|
|
|
new InputCustomDateTimeConverter(), |
|
|
|
new InputCustomNullableDateTimeConverter() |
|
|
|
}, |
|
|
|
WriteIndented = false,// 可选,用于格式化输出
|
|
|
|
WriteIndented = false, |
|
|
|
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All) |
|
|
|
} |
|
|
|
); |
|
|
|
}); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
@ -316,22 +329,25 @@ namespace TaskManager.Controllers |
|
|
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, |
|
|
|
Converters = |
|
|
|
{ |
|
|
|
new DecimalTrimConverter(), |
|
|
|
new DecimalTrimConverter(), |
|
|
|
}, |
|
|
|
WriteIndented = false,// 可选,用于格式化输出
|
|
|
|
WriteIndented = false, |
|
|
|
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All) |
|
|
|
} |
|
|
|
); |
|
|
|
}); |
|
|
|
} |
|
|
|
errorlist.Add($"第 {i} 页奇瑞数据保存失败 {result.message}"); |
|
|
|
await _logger.AddError($"第 {i} 页奇瑞数据保存失败 {result.message}。", TaskName, sub.TaskId, version,inputjson); |
|
|
|
await _logger.AddError($"第 {i} 页奇瑞数据保存失败 {result.message}。", TaskName, sub.TaskId, version, inputjson); |
|
|
|
} |
|
|
|
} |
|
|
|
if (errorNumber> 0) |
|
|
|
|
|
|
|
if (errorNumber > 0) |
|
|
|
{ |
|
|
|
await _logger.AddError($"奇瑞{sub.TaskId}任务失败,请检查数据。", TaskName, sub.TaskId, version); |
|
|
|
sub.FailedCount = errorNumber>totalPages? totalPages* pageSize: errorNumber * pageSize; |
|
|
|
sub.FailedInfo = $"奇瑞{sub.TaskId}任务失败{errorlist.FirstOrDefault()},请检查数据。"; |
|
|
|
|
|
|
|
sub.FailedCount = failedRecordCount; |
|
|
|
|
|
|
|
|
|
|
|
sub.FailedInfo = $"奇瑞{sub.TaskId}任务在{string.Join("、", errorPages)}失败,共{failedRecordCount}条记录失败,请检查数据。"; |
|
|
|
|
|
|
|
sub.WriteState = true; |
|
|
|
_jobDbContext.Set<TaskSub>().Update(sub); |
|
|
|
_jobDbContext.SaveChanges(); |
|
|
@ -340,7 +356,143 @@ namespace TaskManager.Controllers |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//public async Task SyncTaskSubTable(string taskName, string client)
|
|
|
|
//{
|
|
|
|
// var version = DateTime.Now.ToString("yyyyMMdd");
|
|
|
|
// var requestDate = DateTime.Now.ToString("yyyy-MM-dd");
|
|
|
|
// if (string.IsNullOrEmpty(taskName) || string.IsNullOrEmpty(client))
|
|
|
|
// {
|
|
|
|
// await _logger.AddError("任务名称或客户端不能为空", taskName, Guid.NewGuid(), version);
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
// var sublist = _jobDbContext.TaskSub.Where(p => taskName.Contains(p.TaskName) && p.WriteState == false && p.Subscriber == client).ToList();
|
|
|
|
// int pageSize = CPageSize;
|
|
|
|
// if (sublist.Any())
|
|
|
|
// {
|
|
|
|
// foreach (var sub in sublist)
|
|
|
|
// {
|
|
|
|
// 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<T>(querystr);//明细表
|
|
|
|
// if (entites.Any())
|
|
|
|
// {
|
|
|
|
|
|
|
|
// var total = entites.Count();
|
|
|
|
// sub.DataCount = total;
|
|
|
|
// int totalPages = (int)Math.Ceiling((double)total / pageSize);
|
|
|
|
// int startPage = sub.SyncedPageCount == 0 ? 1 : sub.SyncedPageCount;
|
|
|
|
|
|
|
|
// int errorNumber = 0;
|
|
|
|
// List<string> errorlist=new List<string>();
|
|
|
|
|
|
|
|
// for (int i = startPage; i <= totalPages; i++)
|
|
|
|
// {
|
|
|
|
// var records = entites.Skip((i - 1) * pageSize)
|
|
|
|
// .Take(pageSize).ToList();
|
|
|
|
// #region dto转换作为参数发给客户API 因为实体比DTO字段多
|
|
|
|
// List<TDTO> dtos = new List<TDTO>();
|
|
|
|
// foreach (var itm in records)
|
|
|
|
// {
|
|
|
|
// TDTO dto = new TDTO();
|
|
|
|
// dto.InjectFrom(itm);
|
|
|
|
// dtos.Add(dto);
|
|
|
|
// }
|
|
|
|
// PagedRequest<TDTO> pagedRequest = new PagedRequest<TDTO>()
|
|
|
|
// {
|
|
|
|
// batchNo = GenerateRandomStringWith8EG(),
|
|
|
|
// total = entites.Count(),
|
|
|
|
// pageSize = pageSize,
|
|
|
|
// list = dtos,
|
|
|
|
// pageNum = i
|
|
|
|
// };
|
|
|
|
// #endregion
|
|
|
|
// foreach (var itm in records)
|
|
|
|
// {
|
|
|
|
// itm.WriteState = true;
|
|
|
|
// itm.RequestDate = requestDate;
|
|
|
|
// }
|
|
|
|
// var result = await PostPageAsync(pagedRequest, sub.TaskId, version);
|
|
|
|
// if (result.code == 200)
|
|
|
|
// {
|
|
|
|
// await _logger.AddSuccess($"第 {i} 页奇瑞数据保存成功", TaskName, sub.TaskId, version);
|
|
|
|
// _jobDbContext.BulkUpdate(records, options => options.UseTableLock = true);
|
|
|
|
// List<TLOGS> logs = new List<TLOGS>();
|
|
|
|
// foreach (var itm in records)
|
|
|
|
// {
|
|
|
|
// TLOGS log = new TLOGS();
|
|
|
|
// log.InjectFrom(itm);
|
|
|
|
// log.RequestDate = requestDate;
|
|
|
|
// log.TaskId = sub.TaskId;
|
|
|
|
// log.WriteState = true;
|
|
|
|
// log.ReadState = true;
|
|
|
|
// logs.Add(log);
|
|
|
|
// }
|
|
|
|
// _jobDbContext.BulkInsert(logs, options => options.UseTableLock = true);
|
|
|
|
// sub.SyncedPageCount = i;
|
|
|
|
// if (i == totalPages)
|
|
|
|
// {
|
|
|
|
// sub.WriteState = true;
|
|
|
|
// _jobDbContext.Set<TaskSub>().Update(sub);
|
|
|
|
// _jobDbContext.SaveChanges();
|
|
|
|
// await _logger.AddSuccess($"奇瑞{sub.TaskId}任务完成据保存成功", TaskName, sub.TaskId, version);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// //sub.FailedCount = i * pageSize;
|
|
|
|
// //sub.FailedInfo = $"第 {i} 页奇瑞数据保存失败 {result.message}。";
|
|
|
|
// errorNumber++;
|
|
|
|
// string inputjson = string.Empty;
|
|
|
|
// if (TaskName == "日物料需求计划风险确认")//格式特殊处理
|
|
|
|
// {
|
|
|
|
// inputjson = JsonSerializer.Serialize(pagedRequest,
|
|
|
|
// new JsonSerializerOptions
|
|
|
|
// {
|
|
|
|
// PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
|
|
|
// Converters =
|
|
|
|
// {
|
|
|
|
// new DecimalTrimConverter(),
|
|
|
|
// new InputCustomDateTimeConverter(),
|
|
|
|
// new InputCustomNullableDateTimeConverter()
|
|
|
|
// },
|
|
|
|
// WriteIndented = false,// 可选,用于格式化输出
|
|
|
|
// Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All)
|
|
|
|
// }
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// inputjson = JsonSerializer.Serialize(pagedRequest,
|
|
|
|
// new JsonSerializerOptions
|
|
|
|
// {
|
|
|
|
// PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
|
|
|
// Converters =
|
|
|
|
// {
|
|
|
|
// new DecimalTrimConverter(),
|
|
|
|
// },
|
|
|
|
// WriteIndented = false,// 可选,用于格式化输出
|
|
|
|
// Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All)
|
|
|
|
// }
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
// errorlist.Add($"第 {i} 页奇瑞数据保存失败 {result.message}");
|
|
|
|
// await _logger.AddError($"第 {i} 页奇瑞数据保存失败 {result.message}。", TaskName, sub.TaskId, version,inputjson);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// if (errorNumber> 0)
|
|
|
|
// {
|
|
|
|
// await _logger.AddError($"奇瑞{sub.TaskId}任务失败,请检查数据。", TaskName, sub.TaskId, version);
|
|
|
|
// sub.FailedCount = errorNumber>totalPages? totalPages* pageSize: errorNumber * pageSize;
|
|
|
|
// sub.FailedInfo = $"奇瑞{sub.TaskId}任务失败{errorlist.FirstOrDefault()},请检查数据。";
|
|
|
|
// sub.WriteState = true;
|
|
|
|
// _jobDbContext.Set<TaskSub>().Update(sub);
|
|
|
|
// _jobDbContext.SaveChanges();
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
[HttpGet] |
|
|
|
public async Task<ActionResult<IEnumerable<T>>> GetAll() |
|
|
|
{ |
|
|
|