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 : 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(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 { {"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() // .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 // { // {"TaskSubTable1", typeof(TaskSubTable1)}, // {"TaskSubTable2", typeof(TaskSubTable2)} // }; // return typeMap.TryGetValue(subTableName, out var type) ? type : null; // } //} }