Browse Source

提交

master
zxy 3 weeks ago
parent
commit
0aac378363
  1. 204
      API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs

204
API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs

@ -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()
{

Loading…
Cancel
Save