From 22f443f24ea48e8bf3940d0432f00edbb0a86c2f Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 11 九月 2025 10:55:49 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs |  210 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 204 insertions(+), 6 deletions(-)

diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
index 98fea13..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,12 +20,24 @@
     /// 鐏靛伐鏌ヨ澶勭悊鍣�
     /// </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<GetEnterpriseEmployeeQuery, GetEnterpriseEmployeeQueryResult>,
+        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>
         /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁
@@ -65,7 +82,28 @@
             }
             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)
             {
@@ -97,13 +135,14 @@
                 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);
         }
@@ -138,5 +177,164 @@
 
             return model;
         }
+
+        /// <summary>
+        /// 鏌ヨ涓汉鐢ㄦ埛绛剧害鍒楄〃
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        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)
+            {
+                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.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass
+                    || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop);
+            }
+            var s = q.Select(it => new GetPersonalUserElectronSignsQueryResultItem
+            {
+                Id = it.Id,
+                EnterpriseName = it.Enterprise.EnterpriseName,
+                UserSignContractStatus = it.UserSignContractStatus,
+            });
+            return await request.PageModel.GetPagedListAsync<GetPersonalUserElectronSignsQueryResult, GetPersonalUserElectronSignsQueryResultItem>(s, cancellationToken);
+        }
+
+        /// <summary>
+        /// 鏌ヨ涓汉鐢ㄦ埛绛剧害璇︽儏
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<GetPersonalUserElectronSignQueryResult> Handle(GetPersonalUserElectronSignQuery request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            if (request.Id.HasValue)
+            {
+                var model = await rep.AsQueryable().AsNoTracking()
+                    .Where(it => it.UserId == logier.Id && it.Id == request.Id)
+                    .GetDetail<EnterpriseEmployee, GetPersonalUserElectronSignQueryResult>();
+                return model;
+            }
+            else if (request.Code.IsNotNull())
+            {
+                var contractTemplate = await repContractTemplate.AsQueryable().AsNoTracking()
+                    .Where(it => it.Code == request.Code)
+                    .FirstOrDefaultAsync();
+                if (contractTemplate == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓");
+
+                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