FlexJobApi.Core/FlexJobApi.Core.xml
@@ -3743,6 +3743,36 @@ Cron表达式 </summary> </member> <member name="T:FlexJobApi.Core.CheckReceiveTaskCommand"> <summary> 任务验收 </summary> </member> <member name="P:FlexJobApi.Core.CheckReceiveTaskCommand.Id"> <summary> 提交Id </summary> </member> <member name="P:FlexJobApi.Core.CheckReceiveTaskCommand.CheckReceiveStatus"> <summary> 验收状态 </summary> </member> <member name="T:FlexJobApi.Core.SubmitCheckReceiveTaskCommand"> <summary> 任务提交验收 </summary> </member> <member name="P:FlexJobApi.Core.SubmitCheckReceiveTaskCommand.TaskInfoId"> <summary> 任务Id </summary> </member> <member name="P:FlexJobApi.Core.SubmitCheckReceiveTaskCommand.Files"> <summary> 附件 </summary> </member> <member name="T:FlexJobApi.Core.GetCheckReceiveTaskQuery"> <summary> 查询验收任务详情 @@ -3970,6 +4000,41 @@ 最近验收时间 </summary> </member> <member name="T:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQuery"> <summary> 查询验收提交详情 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQuery.Id"> <summary> 提交Id </summary> </member> <member name="T:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQueryResult"> <summary> 查询验收提交详情-结果 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQueryResult.Id"> <summary> 提交Id </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQueryResult.TaskInfoUserEnterpriseEmployeeUser"> <summary> 人员信息 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQueryResult.CreatedTime"> <summary> 提交时间 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQueryResult.Files"> <summary> 验收照片 </summary> </member> <member name="T:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQuery"> <summary> 查询验收详情 @@ -3983,6 +4048,97 @@ <member name="T:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResult"> <summary> 查询验收详情-结果 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResult.ObjectData"> <summary> 详情 </summary> </member> <member name="T:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectData"> <summary> 查询验收详情-结果-详情 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectData.TaskInfo"> <summary> 任务信息 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectData.EnterpriseEmployeeUser"> <summary> 人员信息 </summary> </member> <member name="T:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo"> <summary> 查询验收详情-结果-详情-任务信息 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo.Name"> <summary> 任务名称 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo.BeginTime"> <summary> 任务开始时间 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo.EndTime"> <summary> 任务结束时间 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo.AddressName"> <summary> 任务地点名称 </summary> </member> <member name="T:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser"> <summary> 查询验收详情-结果-详情-人员信息 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser.Avatar"> <summary> 头像 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser.Name"> <summary> 姓名 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser.Identity"> <summary> 身份证号 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser.Gender"> <summary> 性别 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser.Age"> <summary> 年龄 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser.ContactPhoneNumber"> <summary> 手机号 </summary> <remarks>联系电话</remarks> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser.IsReal"> <summary> 是否实名 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser.RealMethod"> <summary> 实名方式 </summary> </member> <member name="T:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultItem"> @@ -4140,6 +4296,71 @@ 发布状态 </summary> </member> <member name="T:FlexJobApi.Core.GetOpenTaskInfosQuery"> <summary> 查询开放任务分页列表 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.Keywords"> <summary> 关键字(任务名称) </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.EnterpriseId"> <summary> 企业Id </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.BeginTime"> <summary> 发布时间-开始 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.EndTime"> <summary> 发布时间-结束 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.CityCode"> <summary> 任务地点所属城市编号 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.SettlementCycle"> <summary> 结算方式 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.BenefitCodes"> <summary> 员工福利 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.GenderLimit"> <summary> 性别要求 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.Status"> <summary> 任务状态 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.ReleaseStatus"> <summary> 发布状态 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.RecommendStatus"> <summary> 推荐状态 </summary> </member> <member name="P:FlexJobApi.Core.GetOpenTaskInfosQuery.CheckReceiveStatus"> <summary> 验收状态 </summary> </member> <member name="T:FlexJobApi.Core.GetPersonalApplyTaskInfosQuery"> <summary> 我的报名分页列表 FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Commands/CheckReceiveTaskCommand.cs
New file @@ -0,0 +1,26 @@ using MediatR; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 任务验收 /// </summary> [Resource([EnumResourceController.TaskCheckReceive])] public class CheckReceiveTaskCommand : IRequest<Guid> { /// <summary> /// 提交Id /// </summary> public Guid Id { get; set; } /// <summary> /// 验收状态 /// </summary> public EnumTaskUserSubmitCheckReceiveStatus CheckReceiveStatus { get; set; } } } FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Commands/SubmitCheckReceiveTaskCommand.cs
New file @@ -0,0 +1,31 @@ using MediatR; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 任务提交验收 /// </summary> [Resource([EnumResourceController.TaskCheckReceive])] public class SubmitCheckReceiveTaskCommand : IRequest<Guid> { public SubmitCheckReceiveTaskCommand() { Files = []; } /// <summary> /// 任务Id /// </summary> public Guid TaskInfoId { get; set; } /// <summary> /// 附件 /// </summary> public List<string> Files { get; set; } } } FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Queries/GetCheckReceiveTaskUserSubmitQuery.cs
New file @@ -0,0 +1,49 @@ using MediatR; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 查询验收提交详情 /// </summary> [Resource([EnumResourceController.TaskCheckReceive])] public class GetCheckReceiveTaskUserSubmitQuery : IRequest<GetCheckReceiveTaskUserSubmitQueryResult> { /// <summary> /// 提交Id /// </summary> public Guid Id { get; set; } } /// <summary> /// 查询验收提交详情-结果 /// </summary> public class GetCheckReceiveTaskUserSubmitQueryResult { /// <summary> /// 提交Id /// </summary> public Guid Id { get; set; } /// <summary> /// 人员信息 /// </summary> [JsonProperty("enterpriseEmployeeUser")] public GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser TaskInfoUserEnterpriseEmployeeUser { get; set; } /// <summary> /// 提交时间 /// </summary> public DateTimeOffset CreatedTime { get; set; } /// <summary> /// 验收照片 /// </summary> public List<string> Files { get; set; } } } FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Queries/GetCheckReceiveTaskUserSubmitsQuery.cs
@@ -25,7 +25,99 @@ /// </summary> public class GetCheckReceiveTaskUserSubmitsQueryResult : PagedListQueryResult<GetCheckReceiveTaskUserSubmitsQueryResultItem> { /// <summary> /// 详情 /// </summary> public GetCheckReceiveTaskUserSubmitsQueryResultObjectData ObjectData { get; set; } } /// <summary> /// 查询验收详情-结果-详情 /// </summary> public class GetCheckReceiveTaskUserSubmitsQueryResultObjectData { /// <summary> /// 任务信息 /// </summary> public GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo TaskInfo { get; set; } /// <summary> /// 人员信息 /// </summary> public GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser EnterpriseEmployeeUser { get; set; } } /// <summary> /// 查询验收详情-结果-详情-任务信息 /// </summary> public class GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo { /// <summary> /// 任务名称 /// </summary> public string Name { get; set; } /// <summary> /// 任务开始时间 /// </summary> public DateTime BeginTime { get; set; } /// <summary> /// 任务结束时间 /// </summary> public DateTime EndTime { get; set; } /// <summary> /// 任务地点名称 /// </summary> public string AddressName { get; set; } } /// <summary> /// 查询验收详情-结果-详情-人员信息 /// </summary> public class GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser { /// <summary> /// 头像 /// </summary> public string Avatar { get; set; } /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 身份证号 /// </summary> public string Identity { get; set; } /// <summary> /// 性别 /// </summary> public EnumUserGender? Gender { get; set; } /// <summary> /// 年龄 /// </summary> public int? Age { get; set; } /// <summary> /// 手机号 /// </summary> /// <remarks>联系电话</remarks> public string ContactPhoneNumber { get; set; } /// <summary> /// 是否实名 /// </summary> public bool IsReal { get; set; } /// <summary> /// 实名方式 /// </summary> public EnumUserRealMethod? RealMethod { get; set; } } /// <summary> FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetOpenTaskInfosQuery.cs
New file @@ -0,0 +1,81 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 查询开放任务分页列表 /// </summary> [Resource([EnumResourceController.Task], AllowAnonymous = true)] public class GetOpenTaskInfosQuery : PagedListQuery<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem> { public GetOpenTaskInfosQuery() { BenefitCodes = []; } /// <summary> /// 关键字(任务名称) /// </summary> public string Keywords { get; set; } /// <summary> /// 企业Id /// </summary> public Guid? EnterpriseId { get; set; } /// <summary> /// 发布时间-开始 /// </summary> public DateTime? BeginTime { get; set; } /// <summary> /// 发布时间-结束 /// </summary> public DateTime? EndTime { get; set; } /// <summary> /// 任务地点所属城市编号 /// </summary> public string CityCode { get; set; } /// <summary> /// 结算方式 /// </summary> public EnumSettlementCycle? SettlementCycle { get; set; } /// <summary> /// 员工福利 /// </summary> public List<string> BenefitCodes { get; set; } /// <summary> /// 性别要求 /// </summary> public EnumUserGender? GenderLimit { get; set; } /// <summary> /// 任务状态 /// </summary> public EnumTaskStatus? Status { get; set; } /// <summary> /// 发布状态 /// </summary> public EnumTaskReleaseStatus? ReleaseStatus { get; set; } /// <summary> /// 推荐状态 /// </summary> public EnumTaskRecommendStatus? RecommendStatus { get; set; } /// <summary> /// 验收状态 /// </summary> public EnumTaskCheckReceiveStatus? CheckReceiveStatus { get; set; } } } FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs
@@ -10,7 +10,7 @@ /// <summary> /// 查询任务分页列表 /// </summary> [Resource([EnumResourceController.Task], AllowAnonymous = true)] [Resource([EnumResourceController.Task])] public class GetTaskInfosQuery : PagedListQuery<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem> { public GetTaskInfosQuery() FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml
@@ -4,17 +4,43 @@ <name>FlexJobApi.FlexJobServer.Application</name> </assembly> <members> <member name="T:FlexJobApi.FlexJobServer.Application.TaskUserSubmitQueryHandler"> <member name="T:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveCommandHandler"> <summary> 任务人员查询处理器 任务验收命令处理器 </summary> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserSubmitQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser})"> <member name="M:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUserSubmit})"> <summary> 任务人员查询处理器 任务验收命令处理器 </summary> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserSubmitQueryHandler.Handle(FlexJobApi.Core.GetCheckReceiveTasksQuery,System.Threading.CancellationToken)"> <member name="M:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveCommandHandler.Handle(FlexJobApi.Core.SubmitCheckReceiveTaskCommand,System.Threading.CancellationToken)"> <summary> 任务提交验收 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveCommandHandler.Handle(FlexJobApi.Core.CheckReceiveTaskCommand,System.Threading.CancellationToken)"> <summary> 任务验收 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="T:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveQueryHandler"> <summary> 任务验收查询处理器 </summary> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUserSubmit})"> <summary> 任务验收查询处理器 </summary> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveQueryHandler.Handle(FlexJobApi.Core.GetCheckReceiveTasksQuery,System.Threading.CancellationToken)"> <summary> 查询验收任务分页列表 </summary> @@ -22,9 +48,25 @@ <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserSubmitQueryHandler.Handle(FlexJobApi.Core.GetCheckReceiveTaskQuery,System.Threading.CancellationToken)"> <member name="M:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveQueryHandler.Handle(FlexJobApi.Core.GetCheckReceiveTaskQuery,System.Threading.CancellationToken)"> <summary> 查询验收任务详情 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveQueryHandler.Handle(FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQuery,System.Threading.CancellationToken)"> <summary> 查询验收详情 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskCheckReceiveQueryHandler.Handle(FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQuery,System.Threading.CancellationToken)"> <summary> 查询验收提交详情 </summary> <param name="request"></param> <param name="cancellationToken"></param> @@ -91,6 +133,14 @@ <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoQueryHandler.Handle(FlexJobApi.Core.GetOpenTaskInfosQuery,System.Threading.CancellationToken)"> <summary> 查询开放任务分页列表 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoQueryHandler.Handle(FlexJobApi.Core.GetTaskInfosQuery,System.Threading.CancellationToken)"> <summary> 查询任务分页列表 FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs
New file @@ -0,0 +1,156 @@ using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.FlexJobServer.Application { /// <summary> /// 任务验收命令处理器 /// </summary> public class TaskCheckReceiveCommandHandler( IRepository<TaskInfo> repTaskInfo, IRepository<TaskInfoUser> repTaskInfoUser, IRepository<TaskInfoUserSubmit> repTaskInfoUserSubmit ) : IRequestHandler<SubmitCheckReceiveTaskCommand, Guid>, IRequestHandler<CheckReceiveTaskCommand, Guid> { private readonly IRepository<TaskInfo> repTaskInfo = repTaskInfo; private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser; private readonly IRepository<TaskInfoUserSubmit> repTaskInfoUserSubmit = repTaskInfoUserSubmit; /// <summary> /// 任务提交验收 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> [UnitOfWork] public async Task<Guid> Handle(SubmitCheckReceiveTaskCommand request, CancellationToken cancellationToken) { var now = DateTime.Now; var logier = JwtUtils.GetCurrentLogier(); var task = await repTaskInfo.AsQueryable() .FirstOrDefaultAsync(it => it.Id == request.TaskInfoId, cancellationToken); if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "该任务"); if (task.Status == EnumTaskStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "该任务暂未安排人员"); if (task.ReleaseStatus == EnumTaskReleaseStatus.Stopped) throw Oops.Oh(EnumErrorCodeType.s510, "该任务已结束"); if (!(task.BeginTime <= now && now <= task.EndTime)) throw Oops.Oh(EnumErrorCodeType.s510, "该任务已结束"); var taskUser = await repTaskInfoUser.AsQueryable() .FirstOrDefaultAsync(it => it.TaskInfoId == task.Id && it.EnterpriseEmployee.UserId == logier.Id, cancellationToken); if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "该报名信息"); if (taskUser.ArrangeStatus == EnumTaskUserArrangeStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "暂未安排该任务"); task.LastSubmitTime = now; taskUser.LastSubmitTime = now; var submit = await repTaskInfoUserSubmit.AsQueryable() .Include(it => it.Files) .FirstOrDefaultAsync(it => it.TaskInfoUserId == taskUser.Id && it.Date == now.Date); if (submit == null) { submit = new TaskInfoUserSubmit { TaskInfoUserId = taskUser.Id, Date = now.Date, Files = request.Files.Select(it => new TaskInfoUserSubmitFile { File = it }).ToList(), CreatedTime = now, CheckReceiveStatus = EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive, }; await repTaskInfoUserSubmit.InsertAsync(submit); return submit.Id; } else if (submit.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Success) { throw Oops.Oh(EnumErrorCodeType.s510, "验收已完成,无法修改"); } else { submit.Files = request.Files.Select(it => new TaskInfoUserSubmitFile { File = it }).ToList(); submit.CheckReceiveStatus = EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive; submit.CreatedTime = now; await repTaskInfoUserSubmit.UpdateAsync(submit); return submit.Id; } } /// <summary> /// 任务验收 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> [UnitOfWork] public async Task<Guid> Handle(CheckReceiveTaskCommand request, CancellationToken cancellationToken) { var now = DateTime.Now; var logier = JwtUtils.GetCurrentLogier(); var submit = await repTaskInfoUserSubmit.AsQueryable() .Include(it => it.Files) .FirstOrDefaultAsync(it => it.Id == request.Id); if (submit == null) throw Oops.Oh(EnumErrorCodeType.s404, "该提交信息"); var taskUser = await repTaskInfoUser.AsQueryable() .FirstOrDefaultAsync(it => it.Id == submit.TaskInfoUserId, cancellationToken); if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "该灵工信息"); if (taskUser.ArrangeStatus == EnumTaskUserArrangeStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "未安排该灵工"); var task = await repTaskInfo.AsQueryable() .FirstOrDefaultAsync(it => it.Id == taskUser.TaskInfoId && it.EnterpriseId == logier.EnterpriseId, cancellationToken); if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "该任务"); if (task.Status == EnumTaskStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "该任务暂未安排人员"); if (task.ReleaseStatus == EnumTaskReleaseStatus.Stopped) throw Oops.Oh(EnumErrorCodeType.s510, "该任务已结束"); if (!(task.BeginTime <= now && now <= task.EndTime)) throw Oops.Oh(EnumErrorCodeType.s510, "该任务已结束"); if (request.CheckReceiveStatus != EnumTaskUserSubmitCheckReceiveStatus.Success && request.CheckReceiveStatus != EnumTaskUserSubmitCheckReceiveStatus.Fail) throw Oops.Oh(EnumErrorCodeType.s400, "请选择正确的验收状态"); submit.CheckReceiveStatus = request.CheckReceiveStatus; submit.CheckReceiveTime = now; taskUser.LastCheckReceiveTime = now; task.LastCheckReceiveTime = now; var dates = new List<DateTime>(); for (DateTime i = task.BeginTime.Date; i <= task.EndTime.Date; i = i.AddDays(1)) { dates.Add(i); } var taskUserSubmitDates = await repTaskInfoUserSubmit.AsQueryable().AsNoTracking() .Where(it => it.TaskInfoUserId == taskUser.Id && it.Id != submit.Id && (it.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Success || it.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Fail)) .Select(it => it.Date) .ToListAsync(); taskUserSubmitDates.Add(now.Date); if (dates.All(taskUserSubmitDates.Contains)) { taskUser.CheckReceiveStatus = EnumTaskCheckReceiveStatus.Completed; } var taskUserCheckReceiveStatuses = await repTaskInfoUser.AsQueryable().AsNoTracking() .Where(it => it.TaskInfoId == task.Id && it.Id != taskUser.Id) .Select(it => it.CheckReceiveStatus) .ToListAsync(); taskUserCheckReceiveStatuses.Add(EnumTaskCheckReceiveStatus.Completed); if (taskUserCheckReceiveStatuses.All(it => it == EnumTaskCheckReceiveStatus.Completed)) { task.CheckReceiveStatus = EnumTaskCheckReceiveStatus.Completed; } await repTaskInfoUserSubmit.UpdateAsync(submit); return submit.Id; } } } FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Queries/TaskCheckReceiveQueryHandler.cs
File was renamed from FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Queries/TaskUserSubmitQueryHandler.cs @@ -13,16 +13,20 @@ namespace FlexJobApi.FlexJobServer.Application { /// <summary> /// 任务人员查询处理器 /// 任务验收查询处理器 /// </summary> public class TaskUserSubmitQueryHandler( public class TaskCheckReceiveQueryHandler( IRepository<TaskInfo> repTaskInfo, IRepository<TaskInfoUser> repTaskInfoUser) : IRepository<TaskInfoUser> repTaskInfoUser, IRepository<TaskInfoUserSubmit> repTaskInfoUserSubmit) : IRequestHandler<GetCheckReceiveTasksQuery, GetCheckReceiveTasksQueryResult>, IRequestHandler<GetCheckReceiveTaskQuery, GetCheckReceiveTaskQueryResult> IRequestHandler<GetCheckReceiveTaskQuery, GetCheckReceiveTaskQueryResult>, IRequestHandler<GetCheckReceiveTaskUserSubmitsQuery, GetCheckReceiveTaskUserSubmitsQueryResult>, IRequestHandler<GetCheckReceiveTaskUserSubmitQuery, GetCheckReceiveTaskUserSubmitQueryResult> { private readonly IRepository<TaskInfo> repTaskInfo = repTaskInfo; private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser; private readonly IRepository<TaskInfoUserSubmit> repTaskInfoUserSubmit = repTaskInfoUserSubmit; /// <summary> /// 查询验收任务分页列表 @@ -58,14 +62,16 @@ q = q.Where(it => it.TaskInfoUsers.Any(tu => tu.EnterpriseEmployee.UserId == logier.Id && tu.Submits.Any(s => && (request.CheckReceiveStatus == EnumTaskCheckReceiveStatus.WaitSubmit ? !tu.Submits.Any(s => s.Date.Date == request.Date.Value.Date) : tu.Submits.Any(s => s.Date.Date == request.Date.Value.Date && (request.CheckReceiveStatus == EnumTaskCheckReceiveStatus.WaitSubmit ? s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit : request.CheckReceiveStatus == EnumTaskCheckReceiveStatus.WaitCheckReceive ? s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive : (s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Success || s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Fail))))); || s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Fail)))))); } else { @@ -120,7 +126,50 @@ LastSubmitTime = it.LastSubmitTime, }); var result = await request.PageModel.GetPagedListAsync<GetCheckReceiveTaskQueryResult, GetCheckReceiveTaskQueryResultItem>(s, cancellationToken); result.ObjectData = await repTaskInfo.AsQueryable().AsNoTracking() .Where(it => it.Id == request.TaskInfoId) .GetDetail<TaskInfo, GetCheckReceiveTaskQueryResultObjectData>(); return result; } /// <summary> /// 查询验收详情 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<GetCheckReceiveTaskUserSubmitsQueryResult> Handle(GetCheckReceiveTaskUserSubmitsQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = repTaskInfoUserSubmit.AsQueryable().AsNoTracking() .OrderByDescending(it => it.CreatedTime) .Where(it => it.TaskInfoUserId == request.Id); var s = q.Select(it => new GetCheckReceiveTaskUserSubmitsQueryResultItem { Id = it.Id, CreatedTime = it.CreatedTime, Files = it.Files.Select(f => f.File).ToList(), CheckReceiveStatus = it.CheckReceiveStatus, CheckReceiveTime = it.CheckReceiveTime, }); var result = await request.PageModel.GetPagedListAsync<GetCheckReceiveTaskUserSubmitsQueryResult, GetCheckReceiveTaskUserSubmitsQueryResultItem>(s, cancellationToken); result.ObjectData = await repTaskInfoUser.AsQueryable().AsNoTracking() .Where(it => it.Id == request.Id) .GetDetail<TaskInfoUser, GetCheckReceiveTaskUserSubmitsQueryResultObjectData>(); return result; } /// <summary> /// 查询验收提交详情 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public Task<GetCheckReceiveTaskUserSubmitQueryResult> Handle(GetCheckReceiveTaskUserSubmitQuery request, CancellationToken cancellationToken) { return repTaskInfoUserSubmit.AsQueryable().AsNoTracking() .Where(it => it.Id == request.Id) .GetDetail<TaskInfoUserSubmit, GetCheckReceiveTaskUserSubmitQueryResult>(); } } } FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs
@@ -114,6 +114,7 @@ entity.ArrangeTime = DateTime.Now; entity.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitSubmit; entity.TaskInfo.Status = EnumTaskStatus.Complete; entity.TaskInfo.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitSubmit; } await rep.UpdateAsync(entity); return entity.Id; FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
@@ -20,6 +20,7 @@ IRepository<DictionaryData> repDictionaryData ) : IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>, IRequestHandler<GetOpenTaskInfosQuery, GetTaskInfosQueryResult>, IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult>, IRequestHandler<GetPersonalApplyTaskInfosQuery, GetPersonalApplyTaskInfosQueryResult>, IRequestHandler<GetPersonalHireTaskInfosQuery, GetPersonalHireTaskInfosQueryResult>, @@ -84,6 +85,17 @@ .AnyAsync(it => it.TaskInfoId == request.Id && it.UserId == logier.Id); } return model; } /// <summary> /// 查询开放任务分页列表 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public Task<GetTaskInfosQueryResult> Handle(GetOpenTaskInfosQuery request, CancellationToken cancellationToken) { return Handle(request.Adapt<GetTaskInfosQuery>(), cancellationToken); } /// <summary> @@ -338,5 +350,6 @@ }); return await request.PageModel.GetPagedListAsync<GetPersonalCancelTaskInfosQueryResult, GetPersonalCancelTaskInfosQueryResultItem>(s, cancellationToken); } } }