| | |
| | | using Furion.FriendlyException; |
| | | using MediatR; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using Newtonsoft.Json.Linq; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | |
| | | |
| | | 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) |
| | |
| | | { |
| | | 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 |
| | |
| | | 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(); |
| | |
| | | .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); |
| | | } |
| | | } |
| | | } |