修复入职权限问题

This commit is contained in:
fuenmao
2026-09-14 14:59:32 +08:00
parent 1d925bd10b
commit 20409635d6
3 changed files with 30 additions and 5 deletions
@@ -21,4 +21,9 @@ public interface IOnboardingContractDocumentService : ITransient
/// 根据已审核通过的任务合同生成并保存 DOCX 文件。
/// </summary>
Task<long> Generate(OnboardingGenerateContractInput input);
/// <summary>
/// 员工公开入口已验证一次性任务链接后,生成该链接所属的合同文件。
/// </summary>
Task<long> GenerateForPublicAccess(long taskContractId, long taskId);
}
@@ -306,6 +306,27 @@ public class OnboardingContractDocumentService : IOnboardingContractDocumentServ
task.CreateUserId,
OnboardingPermissionCodes.TaskManageAll,
"入职任务");
return await GenerateCore(contract, task);
}
/// <inheritdoc />
public async Task<long> GenerateForPublicAccess(long taskContractId, long taskId)
{
var contract = await _db.Queryable<ObTaskContract>()
.FirstAsync(item => item.Id == taskContractId && item.TaskId == taskId)
?? throw Oops.Bah("合同不存在");
var task = await _db.Queryable<ObOnboardingTask>().InSingleAsync(taskId)
?? throw Oops.Bah("入职任务不存在");
return await GenerateCore(contract, task);
}
/// <summary>
/// 执行已经完成调用方权限或公开链接归属校验的合同生成逻辑。
/// </summary>
private async Task<long> GenerateCore(ObTaskContract contract, ObOnboardingTask task)
{
var statusAllowsGeneration = task.TaskStatus == OnboardingTaskStatus.PendingFill
|| task.TaskStatus == OnboardingTaskStatus.Rejected
|| task.TaskStatus == OnboardingTaskStatus.Reviewing
@@ -340,7 +361,7 @@ public class OnboardingContractDocumentService : IOnboardingContractDocumentServ
.FirstOrDefault(definition => string.IsNullOrWhiteSpace(
variables.FirstOrDefault(variable => variable.VariableCode == definition.VariableCode)?.VariableValue));
if (missing != null)
throw Oops.Bah($"合同变量“{missing.VariableName}”尚未填写,暂时不能预览合同");
throw Oops.Bah($"合同“{contract.ContractName}”的变量“{missing.VariableName}”尚未填写,暂时不能预览合同");
var sourceResult = await _fileService.Download(new BaseIdInput { Id = source.Id })
?? throw Oops.Bah("无法读取合同源文件");
@@ -200,10 +200,9 @@ public class OnboardingPublicTaskService : IOnboardingPublicTaskService
}
await _snapshotService.Build(link.TaskId);
var fileId = await _contractDocumentService.Generate(new OnboardingGenerateContractInput
{
TaskContractId = contract.Id
});
var fileId = await _contractDocumentService.GenerateForPublicAccess(
contract.Id,
link.TaskId);
var generatedAt = await _db.Queryable<ObTaskContract>()
.Where(item => item.Id == contract.Id)