From 67d5dbb966df4af4304b4168378c68ce83ad01b1 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期三, 10 九月 2025 13:05:50 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs |  133 ++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 122 insertions(+), 11 deletions(-)

diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
index 136ea3f..beff6f6 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
@@ -1,11 +1,16 @@
-锘縰sing FlexJobApi.Core;
+锘縰sing 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;
 
@@ -15,7 +20,12 @@
     /// 鐏靛伐鏌ヨ澶勭悊鍣�
     /// </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>,
@@ -23,6 +33,11 @@
         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>
         /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁
@@ -210,20 +225,116 @@
         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, "璇峰~鍐欑伒宸d鎴栧悎鍚屾ā鏉跨紪鍙�");
+            }
         }
     }
 }

--
Gitblit v1.9.1