111
This commit is contained in:
+49
-3
@@ -162,25 +162,71 @@ public class OnboardingPublicTaskService : IOnboardingPublicTaskService
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据员工当前已填写信息生成合同预览,并返回已替换变量的 DOCX 文件 Id。
|
||||
/// 根据员工当前已填写信息校验变量并提前生成合同 DOCX。
|
||||
/// </summary>
|
||||
public async Task<long> GetContractSourceFileId(OnboardingPublicContractSourceInput input)
|
||||
public async Task<OnboardingPublicContractPrepareOutput> PrepareContract(
|
||||
OnboardingPublicContractSourceInput input)
|
||||
{
|
||||
var link = await GetActiveLink(input.Token);
|
||||
var contract = await _db.Queryable<ObTaskContract>()
|
||||
.FirstAsync(item => item.Id == input.TaskContractId && item.TaskId == link.TaskId)
|
||||
?? throw Oops.Bah("合同不存在");
|
||||
|
||||
// 员工资料保存时会清除旧文件 Id;仍有文件 Id 时还需确认文件记录没有被异常删除。
|
||||
if (contract.GeneratedDocxFileId.HasValue)
|
||||
{
|
||||
var generatedFileExists = await _db.Queryable<SysFile>()
|
||||
.AnyAsync(item => item.Id == contract.GeneratedDocxFileId.Value);
|
||||
if (!generatedFileExists)
|
||||
throw Oops.Bah("已生成的合同文件不存在,请联系管理员重新生成");
|
||||
|
||||
return new OnboardingPublicContractPrepareOutput
|
||||
{
|
||||
FileId = contract.GeneratedDocxFileId.Value,
|
||||
GeneratedAt = contract.GeneratedAt
|
||||
};
|
||||
}
|
||||
|
||||
await _snapshotService.Build(link.TaskId);
|
||||
var fileId = await _contractDocumentService.Generate(new OnboardingGenerateContractInput
|
||||
{
|
||||
TaskContractId = contract.Id
|
||||
});
|
||||
|
||||
var generatedAt = await _db.Queryable<ObTaskContract>()
|
||||
.Where(item => item.Id == contract.Id)
|
||||
.Select(item => item.GeneratedAt)
|
||||
.SingleAsync();
|
||||
return new OnboardingPublicContractPrepareOutput
|
||||
{
|
||||
FileId = fileId,
|
||||
GeneratedAt = generatedAt
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 返回已经准备完成的合同文件,下载阶段不再执行变量校验和文档生成。
|
||||
/// </summary>
|
||||
public async Task<long> GetContractSourceFileId(OnboardingPublicContractSourceInput input)
|
||||
{
|
||||
var link = await GetActiveLink(input.Token);
|
||||
var contract = await _db.Queryable<ObTaskContract>()
|
||||
.FirstAsync(item => item.Id == input.TaskContractId && item.TaskId == link.TaskId)
|
||||
?? throw Oops.Bah("合同不存在");
|
||||
var fileId = contract.GeneratedDocxFileId
|
||||
?? throw Oops.Bah("合同尚未准备完成,请刷新页面后重试");
|
||||
var fileExists = await _db.Queryable<SysFile>()
|
||||
.AnyAsync(item => item.Id == fileId);
|
||||
if (!fileExists)
|
||||
throw Oops.Bah("合同文件不存在,请重新准备合同");
|
||||
|
||||
contract.ReadAt ??= DateTime.Now;
|
||||
if (contract.ContractStatus == TaskContractStatus.PendingGenerate)
|
||||
contract.ContractStatus = TaskContractStatus.PendingConfirm;
|
||||
await _db.Updateable(contract).ExecuteCommandAsync();
|
||||
|
||||
await _db.Updateable(contract)
|
||||
.UpdateColumns(item => new { item.ReadAt, item.ContractStatus })
|
||||
.ExecuteCommandAsync();
|
||||
return fileId;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user