FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
@@ -10,7 +10,7 @@ namespace FlexJobApi.Core { /// <summary> /// 任务雇佣信息 /// 任务人员信息 /// </summary> public class TaskInfoUser : CommonEntity, IEntityTypeBuilder<TaskInfoUser> { @@ -44,6 +44,16 @@ /// </summary> public DateTime? ArrangeTime { get; set; } /// <summary> /// 验收状态 /// </summary> public EnumTaskCheckReceiveStatus? CheckReceiveStatus { get; set; } /// <summary> /// 验收时间 /// </summary> public DateTime? CheckReceiveTime { get; set; } public void Configure(EntityTypeBuilder<TaskInfoUser> entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmit.cs
New file @@ -0,0 +1,39 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 任务人员提交信息 /// </summary> public class TaskInfoUserSubmit : CommonEntity { public TaskInfoUserSubmit() { Files = []; } /// <summary> /// 任务人员Id /// </summary> public Guid TaskInfoUserId { get; set; } /// <summary> /// 任务人员 /// </summary> public TaskInfoUser TaskInfoUser { get; set; } /// <summary> /// 附件 /// </summary> public List<TaskInfoUserSubmitFile> Files { get; set; } /// <summary> /// 验收状态 /// </summary> public EnumTaskUserSubmitCheckReceiveStatus CheckReceiveStatus { get; set; } } } FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmitFile.cs
New file @@ -0,0 +1,31 @@ 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> public class TaskInfoUserSubmitFile : CommonEntity { /// <summary> /// 提交Id /// </summary> public Guid SubmitId { get; set; } /// <summary> /// 提交 /// </summary> public TaskInfoUserSubmit Submit { get; set; } /// <summary> /// 附件 /// </summary> [Required] public string File { get; set; } } } FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs
@@ -111,7 +111,7 @@ public string ContractUrl { get; set; } /// <summary> /// 任务雇佣信息 /// 任务人员信息 /// </summary> public List<TaskInfoUser> TaskInfoUsers { get; set; } } FlexJobApi.Core/Entities/UserServer/Users/User.cs
@@ -250,7 +250,7 @@ public List<UserPhoto> Photos { get; set; } /// <summary> /// 任务雇佣信息 /// 任务人员信息 /// </summary> public List<TaskInfoUser> TaskInfoUsers { get; set; } FlexJobApi.Core/Enums/Common/EnumResourceController.cs
@@ -22,7 +22,7 @@ [ResourceController(Service = EnumResourceService.FlexJobServer)] Task, /// <summary> /// 任务雇佣 /// 任务人员 /// </summary> [ResourceController(Service = EnumResourceService.FlexJobServer)] TaskUser, FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/SetTaskUserArrangeCommand.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.TaskUser])] public class SetTaskUserArrangeCommand : IRequest<Guid> { /// <summary> /// 任务人员Id /// </summary> public Guid Id { get; set; } /// <summary> /// 安排 /// </summary> public EnumTaskUserArrangeStatus ArrangeStatus { get; set; } } } FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/SetTaskUserHireCommand.cs
@@ -14,7 +14,7 @@ public class SetTaskUserHireCommand : IRequest<Guid> { /// <summary> /// 任务雇佣Id /// 任务人员Id /// </summary> public Guid Id { get; set; } FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetArrangeTaskUsersQuery.cs
New file @@ -0,0 +1,135 @@ using Mapster; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// B端查询人员安排分页列表信息 /// </summary> [Resource([EnumResourceController.TaskUser])] public class GetArrangeTaskUsersQuery : PagedListQuery<GetArrangeTaskUsersQueryResult, GetArrangeTaskUsersQueryResultItem> { /// <summary> /// 任务Id /// </summary> public Guid Id { get; set; } /// <summary> /// 关键字(姓名/身份证/电话) /// </summary> public string Keywords { get; set; } /// <summary> /// 安排状态 /// </summary> public EnumTaskUserArrangeStatus? ArrangeStatus { get; set; } } /// <summary> /// B端查询人员安排分页列表信息-结果 /// </summary> public class GetArrangeTaskUsersQueryResult : PagedListQueryResult<GetArrangeTaskUsersQueryResultItem> { } /// <summary> /// B端查询人员安排分页列表信息-结果-项 /// </summary> public class GetArrangeTaskUsersQueryResultItem { /// <summary> /// 任务人员Id /// </summary> public Guid Id { get; set; } /// <summary> /// 头像 /// </summary> public string Avatar { get; set; } /// <summary> /// 姓名 /// </summary> [MaxLength(32)] public string Name { get; set; } /// <summary> /// 身份证号 /// </summary> public string Identity { get; set; } /// <summary> /// 手机号 /// </summary> /// <remarks>联系电话</remarks> public string ContactPhoneNumber { get; set; } /// <summary> /// 性别 /// </summary> public EnumUserGender? Gender { get; set; } /// <summary> /// 年龄 /// </summary> public int? Age { get; set; } /// <summary> /// 是否实名 /// </summary> public bool IsReal { get; set; } /// <summary> /// 实名方式 /// </summary> public EnumUserRealMethod? RealMethod { get; set; } /// <summary> /// 身份编号 /// </summary> public string PersonalIdentityCode { get; set; } /// <summary> /// 身份 /// </summary> public string PersonalIdentityContent { get; set; } /// <summary> /// 学历编号 /// </summary> public string EducationalBackgroundCode { get; set; } /// <summary> /// 学历 /// </summary> public string EducationalBackgroundContent { get; set; } /// <summary> /// 上岗次数 /// </summary> public int TaskCount { get; set; } /// <summary> /// 工作资历 /// </summary> public string WorkSeniority { get; set; } /// <summary> /// 工作经验 /// </summary> public string WorkExperience { get; set; } /// <summary> /// 安排状态 /// </summary> public EnumTaskUserArrangeStatus? ArrangeStatus { get; set; } } } FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetTaskUsersQuery.cs
@@ -34,7 +34,7 @@ public class GetTaskUsersQueryResultItem { /// <summary> /// 任务雇佣Id /// 任务人员Id /// </summary> public Guid Id { get; set; } FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetPersonalApplyTaskInfosQuery.cs
@@ -75,6 +75,11 @@ public List<GetTaskInfoQueryResultBenefit> Benefits { get; set; } /// <summary> /// 任务地点名称 /// </summary> public string AddressName { get; set; } /// <summary> /// 状态 /// </summary> public GetPersonalApplyTaskInfosQueryStatus Status { get; set; } FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetPersonalCancelTaskInfosQuery.cs
@@ -72,5 +72,11 @@ /// 福利 /// </summary> public List<GetTaskInfoQueryResultBenefit> Benefits { get; set; } /// <summary> /// 任务地点名称 /// </summary> public string AddressName { get; set; } } } FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetPersonalHireTaskInfosQuery.cs
@@ -75,6 +75,11 @@ public List<GetTaskInfoQueryResultBenefit> Benefits { get; set; } /// <summary> /// 任务地点名称 /// </summary> public string AddressName { get; set; } /// <summary> /// 状态 /// </summary> public GetPersonalHireTaskInfosQueryStatus Status { get; set; } FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs
@@ -12,14 +12,15 @@ namespace FlexJobApi.FlexJobServer.Application { /// <summary> /// 任务雇佣命令处理器 /// 任务人员命令处理器 /// </summary> public class TaskUserCommandHandler( IRepository<TaskInfoUser> rep, IRepository<UserTaskCollect> repUserTaskCollect ) : IRequestHandler<CollectTaskCommand, int>, IRequestHandler<SetTaskUserHireCommand, Guid> IRequestHandler<SetTaskUserHireCommand, Guid>, IRequestHandler<SetTaskUserArrangeCommand, Guid> { private readonly IRepository<TaskInfoUser> rep = rep; private readonly IRepository<UserTaskCollect> repUserTaskCollect = repUserTaskCollect; @@ -85,6 +86,34 @@ entity.ArrangeStatus = EnumTaskUserArrangeStatus.Wait; } await rep.UpdateAsync(entity); return entity.Id; } /// <summary> /// 任务安排 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<Guid> Handle(SetTaskUserArrangeCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var entity = await rep.AsQueryable() .Include(it => it.EnterpriseEmployee) .Where(it => it.TaskInfo.EnterpriseId == logier.EnterpriseId && it.Id == request.Id) .FirstOrDefaultAsync(cancellationToken); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "该报名信息"); if (entity.ArrangeStatus == EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "该灵工已安排"); entity.ArrangeStatus = request.ArrangeStatus; if (entity.ArrangeStatus == EnumTaskUserArrangeStatus.Complete) { entity.ArrangeTime = DateTime.Now; entity.CheckReceiveStatus = EnumTaskCheckReceiveStatus.Wait; } await rep.UpdateAsync(entity); return entity.Id; } } FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs
@@ -11,11 +11,12 @@ namespace FlexJobApi.FlexJobServer.Application { /// <summary> /// 任务雇佣查询处理器 /// 任务人员查询处理器 /// </summary> public class TaskUserQueryHandler( IRepository<TaskInfoUser> rep) : IRequestHandler<GetTaskUsersQuery, GetTaskUsersQueryResult> IRepository<TaskInfoUser> rep) : IRequestHandler<GetTaskUsersQuery, GetTaskUsersQueryResult>, IRequestHandler<GetArrangeTaskUsersQuery, GetArrangeTaskUsersQueryResult> { private readonly IRepository<TaskInfoUser> rep = rep; @@ -54,5 +55,57 @@ }); return await request.PageModel.GetPagedListAsync<GetTaskUsersQueryResult, GetTaskUsersQueryResultItem>(s, cancellationToken); } /// <summary> /// B端查询人员安排分页列表信息 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<GetArrangeTaskUsersQueryResult> Handle(GetArrangeTaskUsersQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = rep.AsQueryable().AsNoTracking() .OrderBy(it => it.CreatedTime) .Where(it => it.TaskInfo.EnterpriseId == logier.EnterpriseId && it.TaskInfoId == request.Id && it.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Pass && it.EnterpriseEmployee.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseEmployee.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); if (request.ArrangeStatus.HasValue) { q = q.Where(it=>it.ArrangeStatus == request.ArrangeStatus); } if (request.Keywords.IsNotNull()) { q = q.Where(it => it.EnterpriseEmployee.User.Name.Contains(request.Keywords) || it.EnterpriseEmployee.User.Identity.Contains(request.Keywords) || it.EnterpriseEmployee.User.PhoneNumber.Contains(request.Keywords)); } var s = q .Select(it => new GetArrangeTaskUsersQueryResultItem { Id = it.Id, Avatar = it.EnterpriseEmployee.User.Avatar, Name = it.EnterpriseEmployee.User.Name, Identity = it.EnterpriseEmployee.User.Identity, ContactPhoneNumber = it.EnterpriseEmployee.User.ContactPhoneNumber, Gender = it.EnterpriseEmployee.User.Gender, Age = it.EnterpriseEmployee.User.Age, IsReal = it.EnterpriseEmployee.User.IsReal, RealMethod = it.EnterpriseEmployee.User.RealMethod, PersonalIdentityCode = it.EnterpriseEmployee.User.PersonalIdentityCode, PersonalIdentityContent = it.EnterpriseEmployee.User.PersonalIdentity.Content, EducationalBackgroundCode = it.EnterpriseEmployee.User.EducationalBackgroundCode, EducationalBackgroundContent = it.EnterpriseEmployee.User.EducationalBackground.Content, TaskCount = it.EnterpriseEmployee.User.TaskInfoUsers.Count(tu => tu.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Pass), WorkSeniority = it.EnterpriseEmployee.User.WorkSeniority, WorkExperience = it.EnterpriseEmployee.User.WorkExperience, ArrangeStatus = it.ArrangeStatus }); return await request.PageModel.GetPagedListAsync<GetArrangeTaskUsersQueryResult, GetArrangeTaskUsersQueryResultItem>(s, cancellationToken); } } } FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
@@ -217,6 +217,7 @@ BenefitCode = it.BenefitCode, BenefitContent = it.Benefit.Content }).ToList(), AddressName = it.AddressName, Status = it.TaskInfoUsers.Any(it => it.EnterpriseEmployee.UserId == logier.Id && it.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Wait) @@ -277,6 +278,7 @@ BenefitCode = it.BenefitCode, BenefitContent = it.Benefit.Content }).ToList(), AddressName = it.AddressName, Status = now <= it.EndTime ? GetPersonalHireTaskInfosQueryStatus.InProcess : GetPersonalHireTaskInfosQueryStatus.Completed @@ -314,6 +316,7 @@ BenefitCode = it.BenefitCode, BenefitContent = it.Benefit.Content }).ToList(), AddressName = it.AddressName, }); return await request.PageModel.GetPagedListAsync<GetPersonalCancelTaskInfosQueryResult, GetPersonalCancelTaskInfosQueryResultItem>(s, cancellationToken); }