using DocumentFormat.OpenXml.Spreadsheet; using Infrastructure; using Microsoft.Extensions.Configuration; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Interface; using OpenAuth.App.ServiceApp.Request; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OpenAuth.App.ServiceApp { public class AdminTaskManageApp : SqlSugarBaseApp { private readonly IConfiguration _configuration; private readonly ISqlSugarClient client; public AdminTaskManageApp(ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, ISqlSugarClient sqlSugarClient, IConfiguration configuration) : base(unitWork, repository, auth) { _configuration = configuration; this.client = sqlSugarClient; } string[] chineseNumbers = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; /// /// 添加任务 /// /// /// /// public async Task> AddTask(InsTaskReq req) { using (var db = base.UnitWork.CreateContext()) { var user = _auth.GetCurrentUser().User; // 获取ai解译成果 var aishp = await db.InsAishp.GetFirstAsync(r => r.Id == req.ShpId); var insTaskInfo = req.MapTo(); insTaskInfo.Id = Guid.NewGuid().ToString(); insTaskInfo.CreateTime = DateTime.Now; insTaskInfo.CreateUser = user == null ? "" : user.Id.ToString(); insTaskInfo.UpdateTime = DateTime.Now; insTaskInfo.UpdateUser = user == null ? "" : user.Id.ToString(); insTaskInfo.State = 0; insTaskInfo.IsCompleted = false; insTaskInfo.CreateUserName = user == null ? "" : user.Name; insTaskInfo.UpdateUserName = user == null ? "" : user.Name; // 拆分图斑数 int groupNum = (int)Math.Ceiling((double)aishp.ShpCount / 1000); List insTaskGroup = new List(); int lastGroupRemaining = (int)aishp.ShpCount; for (var i = 1; i <= groupNum; i++) { int everyNum = 1000; string chineseGroupName = $"{ConvertToChineseNumber(i)}组"; // 如果是最后一组,并且剩余的少于1000,将剩余的任务加到上一组 if (i == groupNum && lastGroupRemaining < 1000) { everyNum = lastGroupRemaining; if (i > 1) { // 更新上一组的 EndNum var lastGroup = insTaskGroup.Last(); lastGroup.EndNum += everyNum; } break; // 最后一组处理完毕,退出循环 } // 计算每组的起始和结束数字 int beginNum = (i - 1) * 1000 + 1; int endNum = beginNum + everyNum - 1; insTaskGroup.Add(new InsTaskgroup { Id = Guid.NewGuid().ToString(), GroupName = chineseGroupName, Sort = i, BeginNum = beginNum, EndNum = endNum, TaskId = insTaskInfo.Id, IsComplate = false, CreateTime = DateTime.Now, }); lastGroupRemaining -= everyNum; // 更新剩余的任务数 } //添加前后时相 List insTasktifList = new List(); foreach (var item in req.PreviousPhase) { insTasktifList.Add(new InsTasktif { TaskId = insTaskInfo.Id, TifId = item, TifType = 0 }); ; } foreach (var item in req.LaterPhase) { insTasktifList.Add(new InsTasktif { TaskId = insTaskInfo.Id, TifId = item, TifType = 1 }); ; } // 插入任务和任务组以及前后时相 await db.InsTask.InsertAsync(insTaskInfo); await db.InsTaskgroup.InsertRangeAsync(insTaskGroup); await db.InsTasktif.InsertRangeAsync(insTasktifList); // 提交事务 if (db.Commit()) { return new Response { Result = "添加成功", Message = "添加成功" }; } else { throw new Exception("添加失败"); } } } string ConvertToChineseNumber(int num) { if (num < 1 || num > 10) return num.ToString(); // 如果大于 10 或小于 1,直接返回数字(可以根据需求修改) return chineseNumbers[num]; } /// /// 删除任务 /// /// /// /// public async Task> DeleteTask(string id) { using (var db = base.UnitWork.CreateContext()) { var taskInfo = await db.InsTask.GetFirstAsync(r => r.Id == id); //判断是否存在或者是否已被领取 if (taskInfo == null || taskInfo.State != 0) throw new Exception("任务已被领取,无法删除"); //删除任务表,任务分组表,任务前后时相表 await db.InsTask.DeleteAsync(taskInfo); await db.InsTaskgroup.DeleteAsync(r => r.TaskId == id); await db.InsTasktif.DeleteAsync(r => r.TaskId == id); // 提交事务 if (db.Commit()) { return new Response { Result = "删除成功", Message = "删除成功" }; } else { throw new Exception("删除失败"); } } } /// /// 修改任务 /// /// /// /// public async Task> EditTask(InsTaskReq req) { using (var db = base.UnitWork.CreateContext()) { var insTaskInfo = await db.InsTask.GetFirstAsync(r => r.Id == req.Id); //判断是否存在或者是否已被领取 if (insTaskInfo == null || insTaskInfo.State != 0) throw new Exception("任务已被领取,无法修改"); var user = _auth.GetCurrentUser().User; //删除任务分组表,任务前后时相表 await db.InsTaskgroup.DeleteAsync(r => r.TaskId == req.Id); await db.InsTasktif.DeleteAsync(r => r.TaskId == req.Id); // 获取ai解译成果 var aishp = await db.InsAishp.GetFirstAsync(r => r.Id == req.ShpId); insTaskInfo.TaskName = req.TaskName; insTaskInfo.Remark = req.Remark; insTaskInfo.ShpId = req.ShpId; insTaskInfo.UpdateTime = DateTime.Now; insTaskInfo.UpdateUser = user == null ? "" : user.Id.ToString(); insTaskInfo.UpdateUserName = user == null ? "" : user.Name; // 拆分图斑数 int groupNum = (int)Math.Ceiling((double)aishp.ShpCount / 1000); List insTaskGroup = new List(); int lastGroupRemaining = (int)aishp.ShpCount; for (var i = 1; i <= groupNum; i++) { int everyNum = 1000; string chineseGroupName = $"{ConvertToChineseNumber(i)}组"; // 如果是最后一组,并且剩余的少于1000,将剩余的任务加到上一组 if (i == groupNum && lastGroupRemaining < 1000) { everyNum = lastGroupRemaining; if (i > 1) { // 更新上一组的 EndNum var lastGroup = insTaskGroup.Last(); lastGroup.EndNum += everyNum; } break; // 最后一组处理完毕,退出循环 } // 计算每组的起始和结束数字 int beginNum = (i - 1) * 1000 + 1; int endNum = beginNum + everyNum - 1; insTaskGroup.Add(new InsTaskgroup { Id = Guid.NewGuid().ToString(), GroupName = chineseGroupName, Sort = i, BeginNum = beginNum, EndNum = endNum, TaskId = insTaskInfo.Id, IsComplate = false, CreateTime = DateTime.Now, }); lastGroupRemaining -= everyNum; // 更新剩余的任务数 } //添加前后时相 List insTasktifList = new List(); foreach (var item in req.PreviousPhase) { insTasktifList.Add(new InsTasktif { TaskId = insTaskInfo.Id, TifId = item, TifType = 0 }); ; } foreach (var item in req.LaterPhase) { insTasktifList.Add(new InsTasktif { TaskId = insTaskInfo.Id, TifId = item, TifType = 1 }); ; } // 插入任务和任务组以及前后时相 await db.InsTask.UpdateAsync(insTaskInfo); await db.InsTaskgroup.InsertRangeAsync(insTaskGroup); await db.InsTasktif.InsertRangeAsync(insTasktifList); // 提交事务 if (db.Commit()) { return new Response { Result = "修改成功", Message = "修改成功" }; } else { throw new Exception("修改失败"); } } } } }