using Aop.Api.Domain; using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.DataValidation; using Furion.FriendlyException; using Mapster; 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 { /// /// 任务人员查询处理器 /// public class TaskUserQueryHandler( IRepository rep) : IRequestHandler, IRequestHandler, IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; /// /// B端查询应聘报名分页列表信息 /// /// /// /// public async Task Handle(GetTaskUsersQuery 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); 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)); } if (request.HireStatus.HasValue) { q = q.Where(it => it.HireStatus == request.HireStatus); } var s = q .Select(it => new GetTaskUsersQueryResultItem { Id = it.Id, EnterpriseEmployeeId = it.EnterpriseEmployeeId, 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.TaskInfoUsers.Count(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass), WorkSeniority = it.EnterpriseEmployee.User.WorkSeniority, WorkExperience = it.EnterpriseEmployee.User.WorkExperience, HireStatus = it.HireStatus }); return await request.PageModel.GetPagedListAsync(s, cancellationToken); } /// /// B端查询人员安排分页列表信息 /// /// /// /// public async Task 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.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.TaskInfoUsers.Count(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass), WorkSeniority = it.EnterpriseEmployee.User.WorkSeniority, WorkExperience = it.EnterpriseEmployee.User.WorkExperience, ArrangeStatus = it.ArrangeStatus }); return await request.PageModel.GetPagedListAsync(s, cancellationToken); } /// /// 查询应聘报名人员录用状态 /// /// /// /// public async Task Handle(GetTaskUserHireStatusQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = rep.AsQueryable().AsNoTracking() .Where(it => it.TaskInfoId == request.TaskInfoId); if (logier.Type == EnumUserType.Personal) { q = q.Where(it => it.EnterpriseEmployee.UserId == request.UserId); } else if (request.UserId == null) { throw Oops.Oh(EnumErrorCodeType.s400, "请选择用户"); } else { q = q.Where(it => it.EnterpriseEmployee.UserId == request.UserId); } var model = await q .Select(it => new GetTaskUserHireStatusQueryResult { HireStatus = it.HireStatus }) .FirstOrDefaultAsync(cancellationToken); if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "报名信息"); return model; } /// /// 查询结算名单分页列表数据 /// /// /// /// public async Task Handle(GetSettlementTaskUsersQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var list = new GetSettlementTaskUsersQueryResult(); var q = rep.AsQueryable().AsNoTracking() .Where(it => it.TaskInfoId == request.TaskInfoId); list.Data = q .Select(it => new GetSettlementTaskUsersQueryResultItem { Id = it.Id, Name = it.EnterpriseEmployee.Name, Identity = it.EnterpriseEmployee.Identity, ContactPhoneNumber = it.EnterpriseEmployee.ContactPhoneNumber, CheckReceiveStatus = it.CheckReceiveStatus, Bank = it.Bank, BankBranch = it.BankBranch, ReceiveAccount = it.ReceiveAccount, SettlementAmount = it.SettlementAmount, ActualSettlementAmount = it.ActualSettlementAmount, SettlementTime = it.SettlementTime }) .ToList(); var successList = new List(); if (request.SettlementOrderUrl.IsNotNull()) { var models = await ExcelUtils.ImportExcelFromOSS(request.SettlementOrderUrl); foreach (var model in models) { var errors = new List(); if (model.Name.IsNull()) { errors.Add("请填写姓名"); } if (model.Identity.IsNull()) { errors.Add("请填写身份证号"); } else if (!model.Identity.TryValidate(EnumValidationTypes.ValiIdentity).IsValid) { errors.Add("身份证号格式不正确"); } else if (successList.Any(it => it.Identity == model.Identity)) { errors.Add("身份证号重复"); } if (model.Bank.IsNull()) { errors.Add("请填写所属银行"); } if (model.ReceiveAccount.IsNull()) { errors.Add("请填写收款账号"); } if (model.SettlementAmount == null) { errors.Add("请填写结算金额"); } else if (model.SettlementAmount < 0) { errors.Add("结算金额不可为负数"); } if (model.ActualSettlementAmount == null) { errors.Add("请填写实发金额"); } else if (model.ActualSettlementAmount < 0) { errors.Add("实发金额不可为负数"); } else if (model.ActualSettlementAmount > 0 && model.ActualSettlementAmount < 1) { errors.Add("实发金额不可小于1元"); } var item = list.Data.FirstOrDefault(it => it.Identity == model.Identity); if (item == null) { errors.Add("灵工不存在"); } else if (item.CheckReceiveStatus != EnumTaskCheckReceiveStatus.Completed) { errors.Add("未完成验收"); } else if (item.Name != model.Name) { errors.Add("灵工姓名与实名信息不一致"); } else { item.SettlementAmount = model.SettlementAmount; item.ActualSettlementAmount = model.ActualSettlementAmount; item.ReceiveAccount = model.ReceiveAccount; item.Bank = model.Bank; item.BankBranch = model.BankBranch; } if (errors.IsNotNull()) { var error = model.Adapt(); error.ErrorMessage = errors.SplitJoin(","); list.Errors.Add(error); } else { successList.Add(model); } } if (list.Errors.IsNotNull()) { list.Data = new List(); } else { list.Data = list.Data .Where(it => successList.Any(s => s.Identity == it.Identity)) .ToList(); } } return list; } } }