sunpengfei
2025-09-01 185eca1406926d46fa9f50d07a0c0ecc65ab6b96
FlexJobApi.UserServer.Application/Users/Queries/GetPersonalUserInfosQueryHandler.cs
@@ -16,7 +16,8 @@
    public class GetPersonalUserInfosQueryHandler(
            IRepository<User> rep
        ) :
        IRequestHandler<GetPersonalUserInfosQuery, GetPersonalUserInfosQueryResult>
        IRequestHandler<GetPersonalUserInfosQuery, GetPersonalUserInfosQueryResult>,
        IRequestHandler<GetPersonalUserInfoSignContractsQuery, GetPersonalUserInfoSignContractsQueryResult>
    {
        private readonly IRepository<User> rep = rep;
@@ -29,7 +30,8 @@
        public async Task<GetPersonalUserInfosQueryResult> Handle(GetPersonalUserInfosQuery request, CancellationToken cancellationToken)
        {
            var logier = JwtUtils.GetCurrentLogier();
            var q = rep.AsQueryable().AsNoTracking();
            var q = rep.AsQueryable().AsNoTracking()
                .Where(it => it.Type == EnumUserType.Personal);
            if (request.Keywords.IsNotNull())
            {
                q = q.Where(it =>
@@ -41,21 +43,17 @@
            if (request.HireTimeBegin.HasValue && request.HireTimeEnd.HasValue)
            {
                q = q.Where(it =>
                    it.EnterpriseEmployees.Any(e =>
                        e.HireStatus == EnumTaskUserHireStatus.Pass
                        && e.HireTime.HasValue
                        && request.HireTimeBegin <= e.HireTime
                        && e.HireTime <= request.HireTimeEnd));
                    it.EnterpriseEmployees.SelectMany(ee => ee.TaskInfoUsers).Any(tu =>
                        tu.HireStatus == EnumTaskUserHireStatus.Pass
                        && tu.HireTime.HasValue
                        && request.HireTimeBegin <= tu.HireTime
                        && tu.HireTime <= request.HireTimeEnd));
            }
            if (request.SignContractBegin.HasValue && request.SignContractEnd.HasValue)
            {
                q = q.Where(it =>
                    it.EnterpriseEmployees.Any(e =>
                        e.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass
                        && e.UserSignContractTime.HasValue
                        && request.SignContractBegin <= e.UserSignContractTime
                        && e.UserSignContractTime <= request.SignContractEnd
                        || e.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass
                        e.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass
                        && e.EnterpriseSignContractTime.HasValue
                        && request.SignContractBegin <= e.EnterpriseSignContractTime
                        && e.EnterpriseSignContractTime <= request.SignContractEnd));
@@ -70,6 +68,8 @@
                Name = it.Name,
                ContactPhoneNumber = it.ContactPhoneNumber,
                Identity = it.Identity,
                IdentityImg = it.UserAuth.IdentityImg,
                IdentityBackImg = it.UserAuth.IdentityBackImg,
                Gender = it.Gender,
                Age = it.Age,
                ProvinceCode = it.ProvinceCode,
@@ -80,18 +80,55 @@
                IsReal = it.IsReal,
                RealTime = it.RealTime,
                HireTime = it.EnterpriseEmployees
                    .SelectMany(ee => ee.TaskInfoUsers)
                    .OrderByDescending(e => e.HireTime)
                    .Where(e => e.HireStatus == EnumTaskUserHireStatus.Pass && e.HireTime.HasValue)
                    .Where(e => e.HireTime.HasValue)
                    .Select(e => e.HireTime)
                    .FirstOrDefault(),
                SignContractTime = it.EnterpriseEmployees
                    .OrderByDescending(e => e.EnterpriseSignContractTime > e.UserSignContractTime ? e.EnterpriseSignContractTime : e.UserSignContractTime)
                    .Where(e => e.HireStatus == EnumTaskUserHireStatus.Pass && e.HireTime.HasValue)
                    .Select(e => e.HireTime)
                    .OrderByDescending(e => e.EnterpriseSignContractTime)
                    .Where(e => e.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass && e.EnterpriseSignContractTime.HasValue)
                    .Select(e => e.EnterpriseSignContractTime)
                    .FirstOrDefault(),
            });
            var result = await request.PageModel.GetPagedListAsync<GetPersonalUserInfosQueryResult, GetPersonalUserInfosQueryResultItem>(s, cancellationToken);
            return result;
        }
        /// <summary>
        /// 查询C端人员签约详情分页列表数据
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public Task<GetPersonalUserInfoSignContractsQueryResult> Handle(GetPersonalUserInfoSignContractsQuery request, CancellationToken cancellationToken)
        {
            var q = rep.Change<EnterpriseEmployee>().AsQueryable().AsNoTracking()
                .Where(it => it.UserId == request.Id)
                .Select(it => new GetPersonalUserInfoSignContractsQueryResultItem
                {
                    Id = it.Id,
                    EnterpriseName = it.Enterprise.EnterpriseName,
                    ApplyTime = it.TaskInfoUsers
                        .OrderBy(tu => tu.CreatedTime)
                        .Select(tu => tu.CreatedTime as DateTimeOffset?)
                        .FirstOrDefault(),
                    HireStatus = it.TaskInfoUsers.Any(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass)
                        ? EnumTaskUserHireStatus.Pass
                        : it.TaskInfoUsers.Any(tu => tu.HireStatus == EnumTaskUserHireStatus.Refuse)
                        ? EnumTaskUserHireStatus.Refuse
                        : EnumTaskUserHireStatus.Wait,
                    HireTime = it.TaskInfoUsers
                        .OrderBy(tu => tu.HireTime)
                        .Where(tu => tu.HireTime.HasValue)
                        .Select(tu => tu.HireTime)
                        .FirstOrDefault(),
                    UserSignContractStatus = it.UserSignContractStatus,
                    EnterpriseSignContractStatus = it.EnterpriseSignContractStatus,
                    EnterpriseSignContractTime = it.EnterpriseSignContractTime,
                    ContractUrl = it.ContractUrl
                });
            return request.PageModel.GetPagedListAsync<GetPersonalUserInfoSignContractsQueryResult, GetPersonalUserInfoSignContractsQueryResultItem>(q, cancellationToken);
        }
    }
}