| | |
| | | using FlexJobApi.Core; |
| | | using Aop.Api.Domain; |
| | | using FlexJobApi.Core; |
| | | using Furion.DatabaseAccessor; |
| | | using Furion.DistributedIDGenerator; |
| | | using Furion.FriendlyException; |
| | | using Mapster; |
| | | using MediatR; |
| | | using Microsoft.AspNetCore.Components.Forms; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Security.Principal; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | |
| | | /// 灵工查询处理器 |
| | | /// </summary> |
| | | public class EnterpriseEmployeeQueryHandler( |
| | | IRepository<EnterpriseEmployee> rep |
| | | IRepository<EnterpriseEmployee> rep, |
| | | IRepository<ContractTemplate> repContractTemplate, |
| | | IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract, |
| | | IRepository<Enterprise> repEnterprise, |
| | | IRepository<User> repUser, |
| | | IMediator mediator |
| | | ) : |
| | | IRequestHandler<GetEnterpriseEmployeesQuery, GetEnterpriseEmployeesQueryResult>, |
| | | IRequestHandler<GetEnterpriseEmployeeQuery, GetEnterpriseEmployeeQueryResult>, |
| | | IRequestHandler<GetEnterpriseEmployeeElectronSignsQuery, GetEnterpriseEmployeeElectronSignsQueryResult>, |
| | | IRequestHandler<GetPersonalUserElectronSignsQuery, GetPersonalUserElectronSignsQueryResult>, |
| | | IRequestHandler<GetPersonalUserElectronSignQuery, GetPersonalUserElectronSignQueryResult> |
| | | { |
| | | private readonly IRepository<EnterpriseEmployee> rep = rep; |
| | | private readonly IRepository<ContractTemplate> repContractTemplate = repContractTemplate; |
| | | private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract; |
| | | private readonly IRepository<Enterprise> repEnterprise = repEnterprise; |
| | | private readonly IRepository<User> repUser = repUser; |
| | | private readonly IMediator mediator = mediator; |
| | | |
| | | /// <summary> |
| | | /// 查询灵工分页列表数据 |
| | |
| | | } |
| | | if (request.UserSignContractStatus.HasValue) |
| | | { |
| | | q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); |
| | | if (logier.ClientType == EnumClientType.Wxmp) |
| | | { |
| | | switch (request.UserSignContractStatus.Value) |
| | | { |
| | | case EnumTaskUserSignContractStatus.Wait: |
| | | q = q.Where(it => it.UserSignContractStatus == null || it.UserSignContractStatus == request.UserSignContractStatus); |
| | | break; |
| | | case EnumTaskUserSignContractStatus.Pass: |
| | | q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); |
| | | break; |
| | | case EnumTaskUserSignContractStatus.Stop: |
| | | q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); |
| | | break; |
| | | default: |
| | | q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); |
| | | } |
| | | } |
| | | if (request.EnterpriseSignContractStatus.HasValue) |
| | | { |
| | |
| | | UserSignContractStatus = it.UserSignContractStatus, |
| | | HireTime = it.TaskInfoUsers |
| | | .OrderBy(tu => tu.HireTime) |
| | | .Where(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass && tu.HireTime.HasValue) |
| | | .Where(tu => tu.HireTime.HasValue) |
| | | .Select(tu => tu.HireTime) |
| | | .FirstOrDefault(), |
| | | UserRealTime = it.User.RealTime, |
| | | UserSignContractTime = it.UserSignContractTime, |
| | | EnterpriseSignContractStatus = it.EnterpriseSignContractStatus, |
| | | EnterpriseSignContractTime = it.EnterpriseSignContractTime |
| | | EnterpriseSignContractTime = it.EnterpriseSignContractTime, |
| | | ContractUrl = it.ContractUrl, |
| | | }); |
| | | return await request.PageModel.GetPagedListAsync<GetEnterpriseEmployeesQueryResult, GetEnterpriseEmployeesQueryResultItem>(s, cancellationToken); |
| | | } |
| | |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<GetEnterpriseEmployeeElectronSignsQueryResult> Handle(GetEnterpriseEmployeeElectronSignsQuery request, CancellationToken cancellationToken) |
| | | public async Task<GetPersonalUserElectronSignsQueryResult> Handle(GetPersonalUserElectronSignsQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = rep.AsQueryable().AsNoTracking() |
| | | .Where(it => it.UserId == logier.Id); |
| | | if (request.UserSignContractStatus.HasValue) |
| | | { |
| | | q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus.Value); |
| | | if (request.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) |
| | | { |
| | | q = q.Where(it => it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); |
| | | } |
| | | else |
| | | { |
| | | q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus.Value); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | q = q.Where(it => |
| | | it.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait |
| | | || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect |
| | | || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass |
| | | || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop); |
| | | } |
| | | var s = q.Select(it => new GetEnterpriseEmployeeElectronSignsQueryResultItem |
| | | var s = q.Select(it => new GetPersonalUserElectronSignsQueryResultItem |
| | | { |
| | | Id = it.Id, |
| | | EnterpriseName = it.Enterprise.EnterpriseName, |
| | | UserSignContractStatus = it.UserSignContractStatus, |
| | | }); |
| | | return await request.PageModel.GetPagedListAsync<GetEnterpriseEmployeeElectronSignsQueryResult, GetEnterpriseEmployeeElectronSignsQueryResultItem>(s, cancellationToken); |
| | | return await request.PageModel.GetPagedListAsync<GetPersonalUserElectronSignsQueryResult, GetPersonalUserElectronSignsQueryResultItem>(s, cancellationToken); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | public async Task<GetPersonalUserElectronSignQueryResult> Handle(GetPersonalUserElectronSignQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = rep.AsQueryable().AsNoTracking() |
| | | .Where(it => it.UserId == logier.Id); |
| | | if (request.Id.HasValue) |
| | | { |
| | | q = q.Where(it => it.Id == request.Id); |
| | | var model = await rep.AsQueryable().AsNoTracking() |
| | | .Where(it => it.UserId == logier.Id && it.Id == request.Id) |
| | | .GetDetail<EnterpriseEmployee, GetPersonalUserElectronSignQueryResult>(); |
| | | return model; |
| | | } |
| | | |
| | | if (request.Code.IsNotNull()) |
| | | else if (request.Code.IsNotNull()) |
| | | { |
| | | q = q.Where(it => it.ContractTemplate.Code == request.Code); |
| | | } |
| | | var contractTemplate = await repContractTemplate.AsQueryable().AsNoTracking() |
| | | .Where(it => it.Code == request.Code) |
| | | .FirstOrDefaultAsync(); |
| | | if (contractTemplate == null) throw Oops.Oh(EnumErrorCodeType.s404, "合同"); |
| | | |
| | | var model = await q.GetDetail<EnterpriseEmployee, GetPersonalUserElectronSignQueryResult>(); |
| | | return model; |
| | | await mediator.Send(new CheckContractTemplateCommand |
| | | { |
| | | Id = contractTemplate.Id |
| | | }, cancellationToken); |
| | | |
| | | var entity = await rep.AsQueryable() |
| | | .Where(it => |
| | | it.UserId == logier.Id |
| | | && it.ContractTemplateId == contractTemplate.Id) |
| | | .FirstOrDefaultAsync(); |
| | | var enterprise = await repEnterprise.AsQueryable() |
| | | .Where(it => it.Id == contractTemplate.EnterpriseId) |
| | | .Select(it => new |
| | | { |
| | | it.EnterpriseName |
| | | }) |
| | | .FirstOrDefaultAsync(); |
| | | if (enterprise == null) throw Oops.Oh(EnumErrorCodeType.s404, "企业"); |
| | | var add = false; |
| | | if (entity == null) |
| | | { |
| | | var user = await repUser.AsQueryable().AsNoTracking() |
| | | .Include(it => it.UserAuth) |
| | | .Where(it => it.Id == logier.Id) |
| | | .Select(it => new |
| | | { |
| | | it.Name, |
| | | it.Identity, |
| | | it.ContactPhoneNumber, |
| | | it.Gender, |
| | | it.Age, |
| | | it.UserAuth.IdentityImg, |
| | | it.UserAuth.IdentityBackImg |
| | | }) |
| | | .FirstOrDefaultAsync(cancellationToken); |
| | | if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "账号"); |
| | | entity = new EnterpriseEmployee |
| | | { |
| | | Id = IDGen.NextID(), |
| | | EnterpriseId = contractTemplate.EnterpriseId, |
| | | UserId = logier.Id, |
| | | Name = user.Name, |
| | | Identity = user.Identity, |
| | | ContactPhoneNumber = user.ContactPhoneNumber, |
| | | Gender = user.Gender, |
| | | Age = user.Age, |
| | | IdentityImg = user.IdentityImg, |
| | | IdentityBackImg = user.IdentityBackImg, |
| | | }; |
| | | add = true; |
| | | } |
| | | if (entity.UserSignContractStatus == null) |
| | | { |
| | | entity.ContractTemplateId = contractTemplate.Id; |
| | | entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait; |
| | | entity.UserSignContractTime = null; |
| | | entity.EnterpriseSignContractStatus = null; |
| | | entity.EnterpriseSignContractTime = null; |
| | | entity.ContractCode = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}"; |
| | | entity.ContractUrl = null; |
| | | var contract = new EnterpriseEmployeeContract |
| | | { |
| | | EnterpriseEmployeeId = entity.Id, |
| | | ContractTemplateId = entity.ContractTemplateId, |
| | | ContractCode = entity.ContractCode, |
| | | UserSignContractStatus = entity.UserSignContractStatus, |
| | | }; |
| | | await repEnterpriseEmployeeContract.InsertAsync(contract); |
| | | } |
| | | if (add) |
| | | { |
| | | await rep.InsertAsync(entity); |
| | | } |
| | | else |
| | | { |
| | | await rep.UpdateAsync(entity); |
| | | } |
| | | return new GetPersonalUserElectronSignQueryResult |
| | | { |
| | | Id = entity.Id, |
| | | ContractCode = entity.ContractCode, |
| | | ContractTemplateAccess = contractTemplate.Access, |
| | | UserSignContractStatus = entity.UserSignContractStatus, |
| | | Name = entity.Name, |
| | | Identity = entity.Identity, |
| | | ContactPhoneNumber = entity.ContactPhoneNumber, |
| | | UserSignContractTime = entity.UserSignContractTime, |
| | | EnterpriseEnterpriseName = enterprise.EnterpriseName, |
| | | EnterpriseSignContractTime = entity.EnterpriseSignContractTime, |
| | | ContractUrl = entity.ContractUrl, |
| | | }; |
| | | } |
| | | else |
| | | { |
| | | throw Oops.Oh(EnumErrorCodeType.s400, "请填写灵工Id或合同模板编号"); |
| | | } |
| | | } |
| | | } |
| | | } |