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
{
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);
}
}
}
list.Data = list.Data
.Where(it => successList.Any(s => s.Identity == it.Identity))
.ToList();
return list;
}
}
}