入职任务预览,入职任务cope,验证填入的信息
This commit is contained in:
+11
-36
@@ -8,14 +8,17 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ
|
||||
private readonly SqlSugarScope _db;
|
||||
private readonly IOnboardingContractSnapshotService _snapshotService;
|
||||
private readonly IOnboardingIdentityValidationService _identityValidationService;
|
||||
private readonly IOnboardingContractVariableValidationService _contractVariableValidationService;
|
||||
|
||||
public OnboardingPublicSubmissionService(
|
||||
IOnboardingContractSnapshotService snapshotService,
|
||||
IOnboardingIdentityValidationService identityValidationService)
|
||||
IOnboardingIdentityValidationService identityValidationService,
|
||||
IOnboardingContractVariableValidationService contractVariableValidationService)
|
||||
{
|
||||
_db = DbContext.DB;
|
||||
_snapshotService = snapshotService;
|
||||
_identityValidationService = identityValidationService;
|
||||
_contractVariableValidationService = contractVariableValidationService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -119,15 +122,12 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ
|
||||
{
|
||||
var task = await GetEditableTask(input.Token);
|
||||
var info = await _db.Queryable<ObTaskEmployeeInfo>()
|
||||
.FirstAsync(item => item.TaskId == task.Id);
|
||||
var basicInfoIncomplete = info == null
|
||||
|| string.IsNullOrWhiteSpace(info.EmployeeName)
|
||||
|| string.IsNullOrWhiteSpace(info.Phone)
|
||||
|| string.IsNullOrWhiteSpace(info.IdCardNumber)
|
||||
|| string.IsNullOrWhiteSpace(info.BankCardNumber)
|
||||
|| string.IsNullOrWhiteSpace(info.BankName);
|
||||
if (basicInfoIncomplete)
|
||||
throw Oops.Bah("请先完整填写基本信息");
|
||||
.FirstAsync(item => item.TaskId == task.Id)
|
||||
?? throw Oops.Bah("请先完整填写基本信息");
|
||||
|
||||
// 最终提交必须重新执行全量校验,不能只依赖员工手机端的页面校验。
|
||||
OnboardingEmployeeInfoValidator.ValidateAndNormalize(info);
|
||||
await _db.Updateable(info).ExecuteCommandAsync();
|
||||
|
||||
await _identityValidationService.EnsureNoDuplicate(
|
||||
task.Id,
|
||||
@@ -148,7 +148,7 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ
|
||||
if (hasMissingRequiredMaterial)
|
||||
throw Oops.Bah("仍有必传材料未上传");
|
||||
|
||||
await EnsureRequiredContractVariables(task);
|
||||
await _contractVariableValidationService.Validate(task.Id);
|
||||
|
||||
var hasUnconfirmedRequiredContract = await _db.Queryable<ObTaskContract>()
|
||||
.AnyAsync(item => item.TaskId == task.Id && item.Required && item.ConfirmedAt == null);
|
||||
@@ -214,31 +214,6 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ
|
||||
throw Oops.Bah("该材料已达到最大上传数量");
|
||||
}
|
||||
|
||||
private async Task EnsureRequiredContractVariables(ObOnboardingTask task)
|
||||
{
|
||||
var contracts = await _db.Queryable<ObTaskContract>()
|
||||
.Where(item => item.TaskId == task.Id)
|
||||
.ToListAsync();
|
||||
var contractIds = contracts.Select(contract => contract.Id).ToList();
|
||||
var templateVersionIds = contracts.Select(contract => contract.TemplateVersionId).ToList();
|
||||
var variables = await _db.Queryable<ObTaskContractVariable>()
|
||||
.Where(item => contractIds.Contains(item.TaskContractId))
|
||||
.ToListAsync();
|
||||
var definitions = await _db.Queryable<ObTemplateVariable>()
|
||||
.Where(item => templateVersionIds.Contains(item.TemplateVersionId) && item.Required)
|
||||
.ToListAsync();
|
||||
var missing = contracts
|
||||
.SelectMany(contract => definitions
|
||||
.Where(definition => definition.TemplateVersionId == contract.TemplateVersionId)
|
||||
.Select(definition => new { contract, definition }))
|
||||
.FirstOrDefault(item => string.IsNullOrWhiteSpace(
|
||||
variables.FirstOrDefault(variable => variable.TaskContractId == item.contract.Id
|
||||
&& variable.VariableCode == item.definition.VariableCode)
|
||||
?.VariableValue));
|
||||
if (missing != null)
|
||||
throw Oops.Bah($"合同“{missing.contract.ContractName}”的必填变量“{missing.definition.VariableName}”尚未填写");
|
||||
}
|
||||
|
||||
private Task<List<ObTaskMaterialRequirement>> GetMaterialRequirements(long taskId)
|
||||
{
|
||||
return _db.Queryable<ObTaskMaterialRequirement>()
|
||||
|
||||
Reference in New Issue
Block a user