sunpengfei
2025-08-12 e1441e1a14841f322af3e1ca65490fb8b7993970
feat:开发
4个文件已添加
12个文件已修改
364 ■■■■■ 已修改文件
FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmit.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmitFile.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Entities/UserServer/Users/User.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Enums/Common/EnumResourceController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/SetTaskUserArrangeCommand.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Commands/SetTaskUserHireCommand.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetArrangeTaskUsersQuery.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetTaskUsersQuery.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetPersonalApplyTaskInfosQuery.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetPersonalCancelTaskInfosQuery.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetPersonalHireTaskInfosQuery.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
        }