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
|
{
|
/// <summary>
|
/// 任务人员查询处理器
|
/// </summary>
|
public class TaskUserQueryHandler(
|
IRepository<TaskInfoUser> rep) :
|
IRequestHandler<GetTaskUsersQuery, GetTaskUsersQueryResult>,
|
IRequestHandler<GetArrangeTaskUsersQuery, GetArrangeTaskUsersQueryResult>,
|
IRequestHandler<GetTaskUserHireStatusQuery, GetTaskUserHireStatusQueryResult>,
|
IRequestHandler<GetSettlementTaskUsersQuery, GetSettlementTaskUsersQueryResult>
|
{
|
private readonly IRepository<TaskInfoUser> rep = rep;
|
|
/// <summary>
|
/// B端查询应聘报名分页列表信息
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetTaskUsersQueryResult> 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<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.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<GetArrangeTaskUsersQueryResult, GetArrangeTaskUsersQueryResultItem>(s, cancellationToken);
|
}
|
|
/// <summary>
|
/// 查询应聘报名人员录用状态
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetTaskUserHireStatusQueryResult> 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;
|
}
|
|
/// <summary>
|
/// 查询结算名单分页列表数据
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetSettlementTaskUsersQueryResult> 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<GetSettlementTaskUsersQueryResultExcelRow>();
|
if (request.SettlementOrderUrl.IsNotNull())
|
{
|
var models = await ExcelUtils.ImportExcelFromOSS<GetSettlementTaskUsersQueryResultExcelRow>(request.SettlementOrderUrl);
|
foreach (var model in models)
|
{
|
var errors = new List<string>();
|
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 < (decimal)0.3)
|
{
|
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<GetSettlementTaskUsersQueryResultError>();
|
error.ErrorMessage = errors.SplitJoin(",");
|
list.Errors.Add(error);
|
}
|
else
|
{
|
successList.Add(model);
|
}
|
}
|
|
if (list.Errors.IsNotNull())
|
{
|
list.Data = new List<GetSettlementTaskUsersQueryResultItem>();
|
}
|
else
|
{
|
list.Data = list.Data
|
.Where(it => successList.Any(s => s.Identity == it.Identity))
|
.ToList();
|
}
|
}
|
|
return list;
|
}
|
}
|
}
|