using Infrastructure; using Infrastructure.Extensions; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Interface; using OpenAuth.App.ServiceApp.Task.Request; using OpenAuth.App.ServiceApp.Task.Response; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; namespace OpenAuth.App.ServiceApp.Task; public class PersonTaskApp : SqlSugarBaseApp { public PersonTaskApp(ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth) : base(unitWork, repository, auth) { } /// /// 个人任务列表 /// /// /// public async Task>>> Load(PersonTaskQuery req) { var userId = _auth.GetUserId(); if (string.IsNullOrEmpty(userId)) { throw new Exception("登录失效"); } var userIds = await Repository.ChangeRepository>() .AsQueryable().InnerJoin((a, b) => a.Id == b.GroupId) .Where(a => a.GroupLeaderId == userId) .Select((a, b) => b.UserId) .ToListAsync(); userIds.Add(userId); RefAsync total = 0; var result = await Repository.AsQueryable() .RightJoin((a, b) => a.Id == b.TaskId) .Where((a, b) => userIds.Contains(b.ReciveUserId)) .Select((a, b) => new InsTaskExtend { TaskName = a.TaskName, // 任务名称 GroupName = b.GroupName, // 任务分组包 Sort = b.Sort, // 序号 BeginNum = b.BeginNum, EndNum = b.EndNum, TaskId = b.TaskId, CreateTime = a.CreateTime, // 创建时间 ReciveTime = b.ReciveTime, // 接收时间 ReciveUserId = b.ReciveUserId, //任务接收人 IsComplate = b.IsComplate, // 完成情况 CompleteTime = b.CompleteTime, Remark = b.Remark, TaskGroupId = b.Id, TaskState = a.State, TaskIsCompleted = a.IsCompleted, TaskCreateTime = a.CreateTime, TaskRemark = a.Remark }) .ToPageListAsync(req.page, req.limit, total); return new Response>> { Result = new PageInfo> { Items = result, Total = total } }; } public async Task> GetTaskDetail(string taskGroupId) { var result = await Repository.AsQueryable() .RightJoin((a, b) => a.Id == b.TaskId) .Where((a, b) => b.Id == taskGroupId) .Select((a, b) => new InsTaskExtend { TaskName = a.TaskName, // 任务名称 GroupName = b.GroupName, // 任务分组包 Sort = b.Sort, // 序号 BeginNum = b.BeginNum, EndNum = b.EndNum, TaskId = b.TaskId, CreateTime = a.CreateTime, // 创建时间 ReciveTime = b.ReciveTime, // 接收时间 ReciveUserId = b.ReciveUserId, //任务接收人 IsComplate = b.IsComplate, // 完成情况 CompleteTime = b.CompleteTime, Remark = b.Remark, TaskGroupId = b.Id, TaskState = a.State, TaskIsCompleted = a.IsCompleted, TaskCreateTime = a.CreateTime, TaskRemark = a.Remark }).FirstAsync(); if (result == null) { return new Response { Code = 500, Message = "未找到任务" }; } result.PrePhaseList = await Repository.ChangeRepository>() .AsQueryable() .RightJoin((a, b) => a.TifId == b.Id) .Where(a => a.TaskId == result.TaskId && a.TifType == 0) .Select((a, b) => b.TifName).ToListAsync(); result.NextPhaseList = await Repository.ChangeRepository>() .AsQueryable() .RightJoin((a, b) => a.TifId == b.Id) .Where(a => a.TaskId == result.TaskId && a.TifType == 1) .Select((a, b) => b.TifName).ToListAsync(); return new Response { Result = result }; } public async Task> SubmitTask(string taskGroupId, string remark) { // 修改任务分包状态 var userId = _auth.GetUserId(); if (string.IsNullOrEmpty(userId)) { throw new Exception("登录失效"); } var taskGroup = await Repository .ChangeRepository>() .AsQueryable() .FirstAsync(t => t.Id == taskGroupId); if (taskGroup == null) { return new Response { Code = 500, Message = "未找到任务", Result = false }; } using var uow = UnitWork.CreateContext(); await uow.InsTaskgroup.UpdateSetColumnsTrueAsync(t => new InsTaskgroup { IsComplate = true, Remark = remark, CompleteTime = DateTime.Now }, t => t.Id == taskGroup.Id); // 校验任务是否完成 var unCompletedCount = await Repository.ChangeRepository>() .AsQueryable() .Where(t => t.TaskId == taskGroup.TaskId) .Where(t => t.IsComplate.Equals(false)) .CountAsync(); // 不存在未完成任务 if (unCompletedCount == 0) { //更新任务状态 await uow.InsTask.UpdateSetColumnsTrueAsync(t => new InsTask { Id = taskGroup.TaskId, IsCompleted = true, CompleteTime = DateTime.Now }, t => t.Id == taskGroup.TaskId); } uow.Commit(); return new Response { Result = true }; } public async Task> ReturnTask(string taskGroupId, string remark) { var userId = _auth.GetUserId(); if (string.IsNullOrEmpty(userId)) { throw new Exception("登录失效"); } var taskGroup = await Repository .ChangeRepository>() .AsQueryable() .FirstAsync(t => t.Id == taskGroupId); if (taskGroup.IsComplate) { return new Response { Code = 500, Message = "任务已处理完成,无法退回", Result = false }; } await Repository .ChangeRepository>() .UpdateSetColumnsTrueAsync(t => new InsTaskgroup { Id = taskGroup.Id, IsComplate = false, ReciveUserId = null, ReciveTime = null, Remark = remark }, t => t.Id == taskGroupId); return new Response { Result = true }; } }