You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
5.6 KiB
183 lines
5.6 KiB
using Dapper;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System.Drawing.Printing;
|
|
using TaskManager.Contracts.Dtos;
|
|
using TaskManager.Entity;
|
|
using TaskManager.EntityFramework;
|
|
|
|
namespace TaskManager.Controllers
|
|
{
|
|
public class RecurringJobInputPageController<T, TINPUT> : RecurringJobBaseController
|
|
{
|
|
|
|
public RecurringJobInputPageController(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log)
|
|
{
|
|
|
|
}
|
|
|
|
public async Task ProcessUnsyncedTasks()
|
|
{
|
|
// 查询主表中未完成且子表存在的任务
|
|
|
|
}
|
|
|
|
private async Task SyncTaskSubTable(TaskSub master)
|
|
{
|
|
var page = master.SyncedPageCount + 1; // 下一页
|
|
var sublist=_jobDbContext.TaskSub.Where(p => p.TaskName == master.TaskName && p.WriteState == false).ToList();
|
|
int pageSize = 1000;
|
|
|
|
if (!sublist.Any())
|
|
{
|
|
foreach (var sub in sublist)
|
|
{
|
|
string str = $"select * from {sub.TableName} where TaskId={sub.TaskId} and WriteState=false order by uid";
|
|
var entites=_jobDbContext.Database.GetDbConnection().Query<T>(str);
|
|
var subTableQuery=entites.Skip((page - 1) * pageSize)
|
|
.Take(page).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
Type subTableType = GetSubTableType(master.SubTableName);
|
|
if (subTableType == null) return;
|
|
|
|
// 分页查询子表未同步记录
|
|
var subTableQuery = _dbContext.Set(subTableType)
|
|
.Where($"TaskId == {master.TaskId} AND IsSynced == false")
|
|
.OrderBy("Id") // 假设子表有排序字段
|
|
.Skip((page - 1) * PageSize)
|
|
.Take(PageSize);
|
|
|
|
var records = await subTableQuery.ToListAsync();
|
|
if (!records.Any())
|
|
{
|
|
// 所有子表记录已同步,标记主表完成
|
|
master.IsSynced = true;
|
|
_dbContext.Update(master);
|
|
await _dbContext.SaveChangesAsync();
|
|
return;
|
|
}
|
|
|
|
// 标记子表记录为已同步
|
|
foreach (dynamic record in records)
|
|
{
|
|
record.IsSynced = true;
|
|
_dbContext.Update(record);
|
|
}
|
|
|
|
// 更新主表分页数
|
|
master.SyncedPageCount = page;
|
|
_dbContext.Update(master);
|
|
await _dbContext.SaveChangesAsync();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
private Type GetSubTableType(string subTableName)
|
|
{
|
|
// 示例:通过子表名映射实体类型(实际需根据业务逻辑实现)
|
|
var typeMap = new Dictionary<string, Type>
|
|
{
|
|
{"TaskSubTable1", typeof(TaskSubTable1)},
|
|
{"TaskSubTable2", typeof(TaskSubTable2)}
|
|
};
|
|
return typeMap.TryGetValue(subTableName, out var type) ? type : null;
|
|
}
|
|
}
|
|
|
|
//public class TaskSyncService
|
|
//{
|
|
// private readonly DbContext _dbContext;
|
|
// private const int PageSize = 100; // 每页读取数量
|
|
|
|
// public TaskSyncService(DbContext dbContext)
|
|
// {
|
|
// _dbContext = dbContext;
|
|
// }
|
|
|
|
// public async Task ProcessUnsyncedTasks()
|
|
// {
|
|
// // 查询主表中未完成且子表存在的任务
|
|
// var masters = await _dbContext.Set<TaskMaster>()
|
|
// .Where(m => !m.IsSynced && !string.IsNullOrEmpty(m.SubTableName))
|
|
// .ToListAsync();
|
|
|
|
// foreach (var master in masters)
|
|
// {
|
|
// await SyncTaskSubTable(master);
|
|
// }
|
|
// }
|
|
|
|
// private async Task SyncTaskSubTable(TaskMaster master)
|
|
// {
|
|
// var page = master.SyncedPageCount + 1; // 下一页
|
|
|
|
// // 动态获取子表类型(需根据实际场景实现,如通过字典映射子表名到实体类型)
|
|
// Type subTableType = GetSubTableType(master.SubTableName);
|
|
// if (subTableType == null) return;
|
|
|
|
// // 分页查询子表未同步记录
|
|
// var subTableQuery = _dbContext.Set(subTableType)
|
|
// .Where($"TaskId == {master.TaskId} AND IsSynced == false")
|
|
// .OrderBy("Id") // 假设子表有排序字段
|
|
// .Skip((page - 1) * PageSize)
|
|
// .Take(PageSize);
|
|
|
|
// var records = await subTableQuery.ToListAsync();
|
|
// if (!records.Any())
|
|
// {
|
|
// // 所有子表记录已同步,标记主表完成
|
|
// master.IsSynced = true;
|
|
// _dbContext.Update(master);
|
|
// await _dbContext.SaveChangesAsync();
|
|
// return;
|
|
// }
|
|
|
|
// // 标记子表记录为已同步
|
|
// foreach (dynamic record in records)
|
|
// {
|
|
// record.IsSynced = true;
|
|
// _dbContext.Update(record);
|
|
// }
|
|
|
|
// // 更新主表分页数
|
|
// master.SyncedPageCount = page;
|
|
// _dbContext.Update(master);
|
|
// await _dbContext.SaveChangesAsync();
|
|
// }
|
|
|
|
// private Type GetSubTableType(string subTableName)
|
|
// {
|
|
// // 示例:通过子表名映射实体类型(实际需根据业务逻辑实现)
|
|
// var typeMap = new Dictionary<string, Type>
|
|
// {
|
|
// {"TaskSubTable1", typeof(TaskSubTable1)},
|
|
// {"TaskSubTable2", typeof(TaskSubTable2)}
|
|
// };
|
|
// return typeMap.TryGetValue(subTableName, out var type) ? type : null;
|
|
// }
|
|
//}
|
|
|
|
|
|
|
|
}
|
|
|