sunpengfei
22 分钟以前 5c45bc53e2c18e45130c21048df4af4896455c6d
FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
@@ -1,4 +1,5 @@
using FlexJobApi.Core;
using Aop.Api.Domain;
using FlexJobApi.Core;
using Furion.DatabaseAccessor;
using Furion.DistributedIDGenerator;
using Furion.FriendlyException;
@@ -9,6 +10,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
@@ -21,6 +23,8 @@
            IRepository<EnterpriseEmployee> rep,
            IRepository<ContractTemplate> repContractTemplate,
            IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract,
            IRepository<Enterprise> repEnterprise,
            IRepository<User> repUser,
            IMediator mediator
        ) :
        IRequestHandler<GetEnterpriseEmployeesQuery, GetEnterpriseEmployeesQueryResult>,
@@ -31,6 +35,8 @@
        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>
@@ -74,34 +80,56 @@
            {
                q = q.Where(it => (it.UserId.HasValue && it.User.IsReal) == request.IsReal.Value);
            }
            if (request.UserSignContractStatus.HasValue)
            if (request.SignContractStatus.HasValue)
            {
                if (logier.ClientType == EnumClientType.Wxmp)
                switch (request.SignContractStatus.Value)
                {
                    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);
                    case EnumGetEnterpriseEmployeesQuerySignContractStatus.UserWait:
                        q = q.Where(it => it.UserSignContractStatus == null || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait);
                        break;
                    case EnumGetEnterpriseEmployeesQuerySignContractStatus.EnterpriseWait:
                        q = q.Where(it => it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Wait);
                        break;
                    case EnumGetEnterpriseEmployeesQuerySignContractStatus.Pass:
                        q = q.Where(it =>
                            it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass
                            && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass);
                        break;
                    default:
                        break;
                }
            }
            if (request.EnterpriseSignContractStatus.HasValue)
            else
            {
                q = q.Where(it => it.EnterpriseSignContractStatus == request.EnterpriseSignContractStatus);
                if (request.UserSignContractStatus.HasValue)
                {
                    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)
                {
                    q = q.Where(it => it.EnterpriseSignContractStatus == request.EnterpriseSignContractStatus);
                }
            }
            var s = q.Select(it => new GetEnterpriseEmployeesQueryResultItem
            {
@@ -239,12 +267,51 @@
                }, cancellationToken);
                var entity = await rep.AsQueryable()
                    .Include(it => it.Enterprise)
                    .Where(it =>
                        it.UserId == logier.Id
                        && it.ContractTemplateId == contractTemplate.Id)
                    .FirstOrDefaultAsync();
                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工");
                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;
@@ -262,6 +329,13 @@
                        UserSignContractStatus = entity.UserSignContractStatus,
                    };
                    await repEnterpriseEmployeeContract.InsertAsync(contract);
                }
                if (add)
                {
                    await rep.InsertAsync(entity);
                }
                else
                {
                    await rep.UpdateAsync(entity);
                }
                return new GetPersonalUserElectronSignQueryResult
@@ -274,7 +348,7 @@
                    Identity = entity.Identity,
                    ContactPhoneNumber = entity.ContactPhoneNumber,
                    UserSignContractTime = entity.UserSignContractTime,
                    EnterpriseEnterpriseName = entity.Enterprise.EnterpriseName,
                    EnterpriseEnterpriseName = enterprise.EnterpriseName,
                    EnterpriseSignContractTime = entity.EnterpriseSignContractTime,
                    ContractUrl = entity.ContractUrl,
                };