Infrastructure/OpenAuth.App/ServiceApp/Task/PersonTaskApp.cs

237 lines
8.1 KiB
C#

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<InsTask, SugarDbContext>
{
public PersonTaskApp(ISugarUnitOfWork<SugarDbContext> unitWork, ISimpleClient<InsTask> repository, IAuth auth) :
base(unitWork, repository, auth)
{
}
/// <summary>
/// 个人任务列表
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<InsTaskExtend>>>> Load(PersonTaskQuery req)
{
var userId = _auth.GetUserId();
if (string.IsNullOrEmpty(userId))
{
throw new Exception("登录失效");
}
List<string> userIds;
if (string.IsNullOrEmpty(req.userId))
{
userIds = await Repository.ChangeRepository<SugarRepositiry<SysGroup>>()
.AsQueryable().InnerJoin<SysGroupuser>((a, b) => a.Id == b.GroupId)
.Where(a => a.GroupLeaderId == userId)
.Select((a, b) => b.UserId)
.ToListAsync();
}
else
{
userIds = new List<string>(1) { userId };
}
RefAsync<int> total = 0;
var result = await Repository.AsQueryable()
.RightJoin<InsTaskgroup>((a, b) => a.Id == b.TaskId)
.Where((a, b) => userIds.Contains(b.ReciveUserId))
.WhereIF(!string.IsNullOrEmpty(req.key), (a, b) => a.TaskName.Contains(req.key))
.OrderBy((a, b) => b.CreateTime, OrderByType.Desc)
.Select((a, b) => new InsTaskExtend
{
RowNumber = SqlSugar.SqlFunc.RowNumber(b.Id),
TaskName = a.TaskName, // 任务名称
GroupName = b.GroupName, // 任务分组包
Sort = b.Sort, // 序号
BeginNum = b.BeginNum,
EndNum = b.EndNum,
TubanNum = b.EndNum - b.BeginNum + 1,
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<PageInfo<List<InsTaskExtend>>>
{
Result = new PageInfo<List<InsTaskExtend>>
{
Items = result,
Total = total
}
};
}
public async Task<Response<InsTaskExtend>> GetTaskDetail(string taskGroupId)
{
var result = await Repository.AsQueryable()
.RightJoin<InsTaskgroup>((a, b) => a.Id == b.TaskId)
.InnerJoin<InsAishp>((a, b, c) => a.ShpId == c.Id)
.Where((a, b) => b.Id == taskGroupId)
.Select((a, b, c) => new InsTaskExtend
{
TaskName = a.TaskName, // 任务名称
GroupName = b.GroupName, // 任务分组包
Sort = b.Sort, // 序号
BeginNum = b.BeginNum,
ShpName = c.ShpPath,
EndNum = b.EndNum,
TubanNum = b.EndNum - b.BeginNum + 1,
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,
CreateUserName = a.CreateUserName
}).FirstAsync();
if (result == null)
{
return new Response<InsTaskExtend>
{
Code = 500,
Message = "未找到任务"
};
}
result.PrePhaseList = await Repository.ChangeRepository<SugarRepositiry<InsTasktif>>()
.AsQueryable()
.RightJoin<InsTif>((a, b) => a.TifId == b.Id)
.Where(a => a.TaskId == result.TaskId && a.TifType == 0)
.Select((a, b) => b.TifPath).ToListAsync();
result.NextPhaseList = await Repository.ChangeRepository<SugarRepositiry<InsTasktif>>()
.AsQueryable()
.RightJoin<InsTif>((a, b) => a.TifId == b.Id)
.Where(a => a.TaskId == result.TaskId && a.TifType == 1)
.Select((a, b) => b.TifPath).ToListAsync();
return new Response<InsTaskExtend>
{
Result = result
};
}
public async Task<Response<bool>> SubmitTask(string taskGroupId, string remark)
{
// 修改任务分包状态
var userId = _auth.GetUserId();
if (string.IsNullOrEmpty(userId))
{
throw new Exception("登录失效");
}
var taskGroup = await Repository
.ChangeRepository<SugarRepositiry<InsTaskgroup>>()
.AsQueryable()
.FirstAsync(t => t.Id == taskGroupId);
if (taskGroup == null)
{
return new Response<bool>
{
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<SugarRepositiry<InsTaskgroup>>()
.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<bool>
{
Result = true
};
}
public async Task<Response<bool>> ReturnTask(string taskGroupId, string remark)
{
var userId = _auth.GetUserId();
if (string.IsNullOrEmpty(userId))
{
throw new Exception("登录失效");
}
var taskGroup = await Repository
.ChangeRepository<SugarRepositiry<InsTaskgroup>>()
.AsQueryable()
.FirstAsync(t => t.Id == taskGroupId);
if (taskGroup.IsComplate)
{
return new Response<bool>
{
Code = 500,
Message = "任务已处理完成,无法退回",
Result = false
};
}
await Repository
.ChangeRepository<SugarRepositiry<InsTaskgroup>>()
.UpdateSetColumnsTrueAsync(t => new InsTaskgroup
{
Id = taskGroup.Id,
IsComplate = false,
ReciveUserId = null,
ReciveTime = null,
Remark = remark
},
t => t.Id == taskGroupId);
return new Response<bool>
{
Result = true
};
}
}