using Azure.Core; using Dapper; using Microsoft.EntityFrameworkCore; using System.Drawing.Printing; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; using TaskManager.Contracts.Dtos; using TaskManager.Entity; using TaskManager.EntityFramework; namespace TaskManager.Controllers { public class RecurringJobInputPageController : RecurringJobBaseController where T : BaseEntity { public RecurringJobInputPageController(HttpClient httpClient, JobDbContext jobDbContext, LogController log) : base(httpClient, jobDbContext, log) { } public async Task ProcessUnsyncedTasks() { // 查询主表中未完成且子表存在的任务 } private async Task PostPageAsync(PagedRequest t) { try { var inputjson = JsonSerializer.Serialize(t, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true // 可选,用于格式化输出 } ); inputjson = RemoveWhitespace(inputjson); var content = await Post(Url, Path, inputjson); if (!string.IsNullOrEmpty(content)) { var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, Converters = { new JsonStringEnumConverter(), // 枚举转换 new CustomDateTimeConverter("yyyy-MM-dd HH:mm:ss") // 日期转换 } }; return JsonSerializer.Deserialize(content, options); } else { await _logger.AddError($"调用接口无返回值{Url}", TaskName); return null; } } catch (Exception ex) { await _logger.AddError($"调用接口无返回值错误{ex.Message}", TaskName); return null; } } public static string GenerateRandomStringWith8EG() { const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; var random = new Random(); var sb = new StringBuilder(32); // 随机生成 "8EG" 的插入位置 (0-29) int position = random.Next(0, 30); // 生成前半部分随机字符串 for (int i = 0; i < position; i++) { sb.Append(chars[random.Next(chars.Length)]); } // 插入 "8EG" sb.Append("8EG"); // 生成后半部分随机字符串,补足32位 int remainingLength = 32 - sb.Length; for (int i = 0; i < remainingLength; i++) { sb.Append(chars[random.Next(chars.Length)]); } return sb.ToString(); } private async Task SyncTaskSubTable(TaskSub master) { 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) { var page = sub.SyncedPageCount + 1; // 下一页 string str = $"select * from {sub.TableName} where TaskId='{sub.TaskId}' and WriteState=0 order by uid";//任务表 var entites = _jobDbContext.Database.GetDbConnection().Query(str);//明细表 var records = entites.Skip((page - 1) * pageSize) .Take(page).ToList(); PagedRequest pagedRequest = new PagedRequest() { batchNo = GenerateRandomStringWith8EG(), total = entites.Count(), pageSize = pageSize, list = records, pageNum = page }; foreach (var itm in records) { itm.WriteState = true; } var result = await PostPageAsync(pagedRequest); if (result.code == "200") { _jobDbContext.BulkUpdate(records); sub.SyncedPageCount = page; } else { await _logger.AddError($"第 {page} 页数据保存失败,请检查数据。", TaskName); } //if (!records.Any()) //{ // // 所有子表记录已同步,标记主表完成 // master.WriteState = true; // _dbContext.Update(master); // await _dbContext.SaveChangesAsync(); // return; //} } } } } }