sunpengfei
1 天以前 285404b0f7161ceca8621e61026682bbbb3f71aa
FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs
@@ -5,6 +5,7 @@
using Furion.FriendlyException;
using MediatR;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -56,26 +57,28 @@
        private async Task ContractSign(ElectronSignCallbackCommand request)
        {
            if (request.Data is ElectronSignCallbackCommandContractSignModel data)
            var data = ((JObject)request.Data).ToObject<ElectronSignCallbackCommandContractSignModel>()!;
            var contractId = data.OutContractId.ToGuid("无效的合同Id")!.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)
            {
                var contractId = data.OutContractId.ToGuid("无效的合同Id")!.Value;
                var contract = await repEnterpriseEmployeeContract.AsQueryable()
                    .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, "合同已失效");
                }
                throw Oops.Oh(EnumErrorCodeType.s510, "合同已失效");
            }
            if (request.Success)
            {
                if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign)
                {
                    if (data.UserType == Core.Models.ElectronSignServer.PersonalUserReals.EnumElectronSignUserType.Personal)
@@ -84,11 +87,7 @@
                        {
                            contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass;
                            contract.UserSignContractTime = DateTime.Now;
                        }
                        else if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Cancelled)
                        {
                            contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Refuse;
                            contract.UserSignContractErrorMessage = request.Message;
                            contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Wait;
                        }
                    }
                    else
@@ -98,43 +97,53 @@
                            contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass;
                            contract.EnterpriseSignContractTime = DateTime.Now;
                        }
                        else if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Cancelled)
                        {
                            contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Refuse;
                            contract.EnterpriseSignContractErrorMessage = request.Message;
                        }
                    }
                }
                else if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Cancelled)
                {
                    contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Refuse;
                    contract.UserSignContractErrorMessage = request.Message;
                    contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Refuse;
                    contract.EnterpriseSignContractErrorMessage = request.Message;
                }
                if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Completed)
                {
                    contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Effect;
                    contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass;
                    if (contract.UserSignContractTime == null)
                    {
                        contract.UserSignContractTime = DateTime.Now;
                    }
                    contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Effect;
                    contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass;
                    if (contract.EnterpriseSignContractTime == null)
                    {
                        contract.EnterpriseSignContractTime = DateTime.Now;
                    }
                    contract.ContractUrl = data.ContactUrl;
                    contract.ContractUrl = AliyunOSSUtils.Upload("Contact", data.ContactUrl, $"{contract.ContractTemplate.Name}.pdf").Url;
                }
                await repEnterpriseEmployeeContract.UpdateAsync(contract);
            }
            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);
            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();
@@ -157,29 +166,27 @@
                .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);
            }
            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,
                EnumUserRealMethod.Face,
                user,
                enterpriseEmployees,
                user.UserAuth.Name,
                user.UserAuth.Identity,
                user.UserAuth.IdentityImg,
                user.UserAuth.IdentityBackImg,
                faceRealUrl: user.UserAuth.FaceRealUrl);
            await repUser.UpdateAsync(user);
        }
    }
}