From 8cc3bff6979c8e3d66e9d4caa91398c3f0e58f0a Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 12 九月 2025 15:09:43 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/ApiFlexJob

---
 FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs |  186 ++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 154 insertions(+), 32 deletions(-)

diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs
index 495bd7a..7896a22 100644
--- a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs
@@ -1,9 +1,11 @@
-锘縰sing FlexJobApi.Core;
+锘縰sing Azure.Core;
+using FlexJobApi.Core;
 using Furion;
 using Furion.DatabaseAccessor;
 using Furion.FriendlyException;
 using MediatR;
 using Microsoft.EntityFrameworkCore;
+using Newtonsoft.Json.Linq;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -16,11 +18,17 @@
     /// 鐢靛瓙绛惧洖浼�
     /// </summary>
     public class ElectronSignCallbackCommandHandler(
-            IRepository<User> repUser
+            IRepository<User> repUser,
+            IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract,
+            IRepository<EnterpriseEmployee> repEnterpriseEmployee,
+            IRepository<TaskInfoUser> repTaskInfoUser
         ) :
         IRequestHandler<ElectronSignCallbackCommand, bool>
     {
         private readonly IRepository<User> repUser = repUser;
+        private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract;
+        private readonly IRepository<EnterpriseEmployee> repEnterpriseEmployee = repEnterpriseEmployee;
+        private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser;
 
         /// <summary>
         /// 鐢靛瓙绛惧洖浼�
@@ -33,39 +41,153 @@
             var appId = App.GetConfig<Guid>("ElectronSignServer:AppId");
             if (appId != request.CustomerId)
                 throw Oops.Oh(EnumErrorCodeType.s400, "鏃犳晥鐨凙ppId");
-            if (request.Action == "UserSign")
+            switch (request.Action)
             {
-                var user = await repUser.AsQueryable()
-                    .Include(it => it.UserAuth)
-                    .Where(it => it.UserAuth.ElectronSignUserId == request.RelationId)
-                    .FirstOrDefaultAsync();
-                if (user == null)
-                    throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
-                if (request.Data is ElectronSignCallbackCommandUserSignModel data)
-                {
-                    if (user.Id != data.OutUserId)
-                        throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
-                    var enterpriseEmployees = request.Success
-                        ? await repUser.Change<EnterpriseEmployee>().AsQueryable()
-                            .Where(it => it.UserId == user.Id)
-                            .ToListAsync()
-                        : new List<EnterpriseEmployee>();
-                    PersonalUserRealCommandHandler.PersonalReal(
-                        request.Success == true
-                        ? EnumPersonalUserRealStatus.Real
-                        : EnumPersonalUserRealStatus.Fail,
-                        EnumUserRealMethod.Face,
-                        user,
-                        enterpriseEmployees,
-                        user.UserAuth.Name,
-                        user.UserAuth.Identity,
-                        user.UserAuth.IdentityImg,
-                        user.UserAuth.IdentityBackImg,
-                        faceRealUrl: user.UserAuth.FaceRealUrl);
-                    await repUser.UpdateAsync(user);
-                }
+                case "UserSign":
+                    await UserSign(request);
+                    break;
+                case "ContractSign":
+                    await ContractSign(request);
+                    break;
+                default:
+                    break;
             }
             return true;
         }
+
+        private async Task ContractSign(ElectronSignCallbackCommand request)
+        {
+            var data = ((JObject)request.Data).ToObject<ElectronSignCallbackCommandContractSignModel>()!;
+            var contractId = data.OutContractId.ToGuid("鏃犳晥鐨勫悎鍚孖d")!.Value;
+            var contract = await repEnterpriseEmployeeContract.AsQueryable()
+                .Include(it=>it.ContractTemplate)
+                .Where(it => it.Id == contractId)
+                .FirstOrDefaultAsync();
+            if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓");
+            var entity = await repEnterpriseEmployee.AsQueryable()
+                .Include(it => it.ContractTemplate)
+                .Where(it => it.Id == contract.EnterpriseEmployeeId)
+                .FirstOrDefaultAsync();
+            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐");
+            if (entity.ContractTemplateId != contract.ContractTemplateId
+                || entity.UserSignContractStatus != contract.UserSignContractStatus
+                || entity.UserSignContractTime != contract.UserSignContractTime
+                || entity.EnterpriseSignContractStatus != contract.EnterpriseSignContractStatus
+                || entity.EnterpriseSignContractTime != contract.EnterpriseSignContractTime)
+            {
+                throw Oops.Oh(EnumErrorCodeType.s510, "鍚堝悓宸插け鏁�");
+            }
+            if (request.Success)
+            {
+                if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign)
+                {
+                    if (data.UserType == Core.Models.ElectronSignServer.PersonalUserReals.EnumElectronSignUserType.Personal)
+                    {
+                        if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Signing)
+                        {
+                            contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass;
+                            contract.UserSignContractTime = DateTime.Now;
+                            contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Wait;
+                        }
+                    }
+                    else
+                    {
+                        if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Signing)
+                        {
+                            contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass;
+                            contract.EnterpriseSignContractTime = DateTime.Now;
+                        }
+                    }
+                }
+                if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Completed)
+                {
+                    contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass;
+                    if (contract.UserSignContractTime == null)
+                    {
+                        contract.UserSignContractTime = DateTime.Now;
+                    }
+                    contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass;
+                    if (contract.EnterpriseSignContractTime == null)
+                    {
+                        contract.EnterpriseSignContractTime = DateTime.Now;
+                    }
+                    contract.ContractUrl = AliyunOSSUtils.Upload("Contact", data.ContactUrl, $"{contract.ContractTemplate.Name}.pdf").Url;
+                }
+            }
+            else
+            {
+                if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign)
+                {
+                    if (data.UserType == Core.Models.ElectronSignServer.PersonalUserReals.EnumElectronSignUserType.Personal)
+                    {
+                        contract.UserSignContractErrorMessage = request.Message;
+                    }
+                    else
+                    {
+                        contract.EnterpriseSignContractErrorMessage = request.Message;
+                    }
+                }
+                else
+                {
+                    contract.UserSignContractErrorMessage = request.Message;
+                    contract.EnterpriseSignContractErrorMessage = request.Message;
+                }
+            }
+            await repEnterpriseEmployeeContract.UpdateAsync(contract);
+
+            entity.UserSignContractStatus = contract.UserSignContractStatus;
+            entity.UserSignContractTime = contract.UserSignContractTime;
+            entity.EnterpriseSignContractStatus = contract.EnterpriseSignContractStatus;
+            entity.EnterpriseSignContractTime = contract.EnterpriseSignContractTime;
+            entity.ContractUrl = contract.ContractUrl;
+            await repEnterpriseEmployee.UpdateAsync(entity);
+
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && entity.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass)
+            {
+                var taskUsers = await repTaskInfoUser.AsQueryable()
+                    .Where(it => it.EnterpriseEmployeeId == entity.Id && it.HireStatus == EnumTaskUserHireStatus.Pass && it.ArrangeStatus == null)
+                    .ToListAsync();
+                if (taskUsers.IsNotNull())
+                {
+                    foreach (var taskUser in taskUsers)
+                    {
+                        taskUser.ArrangeStatus = EnumTaskUserArrangeStatus.Wait;
+                    }
+                    await repTaskInfoUser.UpdateAsync(taskUsers);
+                }
+            }
+        }
+
+        private async Task UserSign(ElectronSignCallbackCommand request)
+        {
+            var user = await repUser.AsQueryable()
+                .Include(it => it.UserAuth)
+                .Where(it => it.UserAuth.ElectronSignUserId == request.RelationId)
+                .FirstOrDefaultAsync();
+            if (user == null)
+                throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
+            var data = ((JObject)request.Data).ToObject<ElectronSignCallbackCommandUserSignModel>()!;
+            if (user.Id != data.OutUserId)
+                throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
+            var enterpriseEmployees = request.Success
+                ? await repUser.Change<EnterpriseEmployee>().AsQueryable()
+                    .Where(it => it.UserId == user.Id)
+                    .ToListAsync()
+                : new List<EnterpriseEmployee>();
+            PersonalUserRealCommandHandler.PersonalReal(
+                request.Success == true
+                ? EnumPersonalUserRealStatus.Real
+                : EnumPersonalUserRealStatus.Fail,
+                user.RealMethod!.Value,
+                user,
+                enterpriseEmployees,
+                user.UserAuth.Name,
+                user.UserAuth.Identity,
+                user.UserAuth.IdentityImg,
+                user.UserAuth.IdentityBackImg,
+                user.UserAuth.PhoneNumber,
+                user.UserAuth.FaceRealUrl);
+            await repUser.UpdateAsync(user);
+        }
     }
 }

--
Gitblit v1.9.1