|
|
@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Http; |
|
|
|
using Microsoft.AspNetCore.Http.HttpResults; |
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
|
using Microsoft.EntityFrameworkCore; |
|
|
|
using Microsoft.EntityFrameworkCore.Storage; |
|
|
|
using Microsoft.Extensions.DependencyInjection; |
|
|
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; |
|
|
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
|
|
@ -150,10 +151,12 @@ namespace TaskManager.Controllers |
|
|
|
|
|
|
|
private async Task SyncTaskSubTable(string taskName, string client) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
var task= _jobDbContext.TaskConifgure.FirstOrDefault(p => p.TaskName == taskName); |
|
|
|
|
|
|
|
if (task == null) |
|
|
|
{ |
|
|
|
await _logger.AddError("任务配置不存在,任务设置表(TaskConfigure)是否存在任务对应的表!", taskName, Guid.NewGuid(), DateTime.Now.ToString("yyyyMMdd")); |
|
|
|
return; |
|
|
|
} |
|
|
|
var tableName = task.TableName; |
|
|
|
var total =await _jobDbContext.Database.ExecuteSqlAsync($"select count(1) from {tableName} where writeState=0 and readState=1 "); |
|
|
|
var pageSize = CPageSize; |
|
|
@ -162,93 +165,73 @@ namespace TaskManager.Controllers |
|
|
|
|
|
|
|
for (int i= 1; i <= totalPages; i++) |
|
|
|
{ |
|
|
|
_jobDbContext.Database.SqlQuery<T>($"Select TOP 1000 * from {tableName} where writeState=0 and readerstate=1 order by uid"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var records = _jobDbContext.Database.SqlQuery<T>($"Select TOP {pageSize} * from {tableName} where writeState=0 and readerstate=1 order by uid"); |
|
|
|
var taskId = Guid.NewGuid(); |
|
|
|
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 = pageSize, |
|
|
|
pageSize = pageSize, |
|
|
|
list = dtos, |
|
|
|
pageNum = i |
|
|
|
}; |
|
|
|
foreach (var itm in records) |
|
|
|
{ |
|
|
|
itm.WriteState = true; |
|
|
|
} |
|
|
|
var result = await PostPageAsync(pagedRequest,taskId, DateTime.Now.ToString("yyyyMMdd")); |
|
|
|
if (result.code == 200) |
|
|
|
{ |
|
|
|
|
|
|
|
using (var transaction = await _jobDbContext.Database.BeginTransactionAsync()) |
|
|
|
{ |
|
|
|
var tran = transaction.GetDbTransaction(); |
|
|
|
await _jobDbContext.BulkUpdateAsync(records, options => { options.UseTableLock = false; }); |
|
|
|
try |
|
|
|
{ |
|
|
|
var createtask = new TaskSub(); |
|
|
|
createtask.TaskId = taskId; |
|
|
|
createtask.TaskName =TaskName; |
|
|
|
createtask.Subscriber = Client; |
|
|
|
createtask.TableName = tableName; |
|
|
|
createtask.DataCount = pageSize; |
|
|
|
createtask.Domain = "1"; |
|
|
|
createtask.Site = "1"; |
|
|
|
createtask.FailedCount = 0; |
|
|
|
createtask.CreateTime = DateTime.Now; |
|
|
|
createtask.CreateUser = "admin"; |
|
|
|
createtask.CreationTime = DateTime.Now; |
|
|
|
createtask.SyncedPageCount = pageSize; |
|
|
|
await _jobDbContext.AddAsync(task); |
|
|
|
// 提交事务
|
|
|
|
await transaction.CommitAsync(); |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
await transaction.RollbackAsync(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
await _logger.AddError($"第 {i} 页数据保存失败,请检查数据。", TaskName,taskId, DateTime.Now.ToString("yyyyMMdd")); |
|
|
|
} |
|
|
|
|
|
|
|
await Task.Delay(200); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if (string.IsNullOrEmpty(taskName) || string.IsNullOrEmpty(client))
|
|
|
|
//{
|
|
|
|
// await _logger.AddError("任务名称或客户端不能为空",taskName,Guid.NewGuid(),DateTime.Now.ToString("yyyyMMdd"));
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
// for (int i = sub.SyncedPageCount; 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;
|
|
|
|
// }
|
|
|
|
// var result = await PostPageAsync(pagedRequest,sub.TaskId, DateTime.Now.ToString("yyyyMMdd"));
|
|
|
|
// if(result.code == 200)
|
|
|
|
// {
|
|
|
|
// _jobDbContext.BulkUpdate(records);
|
|
|
|
// sub.SyncedPageCount = i;
|
|
|
|
// if (i == totalPages)
|
|
|
|
// {
|
|
|
|
// sub.WriteState = true;
|
|
|
|
// _jobDbContext.Set<TaskSub>().Update(sub);
|
|
|
|
// _jobDbContext.SaveChanges();
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// sub.FailedCount = i*pageSize;
|
|
|
|
// sub.FailedInfo = $"第 {i} 页奇瑞数据保存失败 {result.message}。";
|
|
|
|
|
|
|
|
// await _logger.AddError($"第 {i} 页奇瑞数据保存失败 {result.message}。", TaskName,sub.TaskId, DateTime.Now.ToString("yyyyMMdd"));
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|