This commit is contained in:
fuenmao
2026-08-25 20:37:17 +08:00
parent 38801533e9
commit be20a31332
22 changed files with 1090 additions and 336 deletions
@@ -75,10 +75,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
.Where(item => item.OnboardingTemplateId == template.Id)
.OrderBy(item => item.SortCode)
.ToListAsync(),
FormFields = await _db.Queryable<ObOnboardingTemplateFormField>()
.Where(item => item.OnboardingTemplateId == template.Id)
.OrderBy(item => item.SortCode)
.ToListAsync(),
FormFields = new List<ObOnboardingTemplateFormField>(),
Materials = await _db.Queryable<ObOnboardingTemplateMaterial>()
.Where(item => item.OnboardingTemplateId == template.Id)
.OrderBy(item => item.SortCode)
@@ -246,49 +243,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
{
if (versions.Any(item => item.VersionStatus != ContractTemplateVersionStatus.Enabled))
throw Oops.Bah("启用入职模板前,请先启用全部合同版本");
var variables = await _db.Queryable<ObTemplateVariable>()
.Where(item => versionIds.Contains(item.TemplateVersionId))
.ToListAsync();
var validTypes = new[]
{
ContractVariableType.Employee,
ContractVariableType.Company,
ContractVariableType.Contract,
ContractVariableType.System
};
if (variables.Any(item => !validTypes.Contains(item.VariableType)))
throw Oops.Bah("合同中仍有未确认来源的变量,请先完成变量映射");
}
var fieldIds = input.FormFields.Select(item => item.FieldId).ToList();
var enabledFields = fieldIds.Count == 0
? new List<ObFormField>()
: await _db.Queryable<ObFormField>()
.Where(item => fieldIds.Contains(item.Id) && item.Status == "enable")
.ToListAsync();
if (enabledFields.Count != fieldIds.Count)
throw Oops.Bah("存在未启用或不存在的动态补充字段");
if (input.Status == "enable")
{
var variables = await _db.Queryable<ObTemplateVariable>()
.Where(item => versionIds.Contains(item.TemplateVersionId)
&& item.VariableType == ContractVariableType.Employee)
.ToListAsync();
var availableFields = new HashSet<string>(
typeof(ObTaskEmployeeInfo).GetProperties().Select(property => property.Name),
StringComparer.OrdinalIgnoreCase);
foreach (var fieldCode in enabledFields.Select(item => item.FieldCode))
availableFields.Add(fieldCode);
var missingMapping = variables.FirstOrDefault(variable =>
!availableFields.Contains(ResolveEmployeeVariableField(variable)));
if (missingMapping != null)
{
throw Oops.Bah(
$"合同员工变量“{missingMapping.VariableCode}”没有对应的固定字段或模板补充字段,请先完成字段映射");
}
}
var materialIds = input.Materials.Select(item => item.MaterialTypeId).ToList();
@@ -301,25 +255,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
}
}
private static string ResolveEmployeeVariableField(ObTemplateVariable variable)
{
var sourceField = variable.EmployeeField;
if (string.IsNullOrWhiteSpace(sourceField))
{
var separatorIndex = variable.VariableCode?.IndexOf('.') ?? -1;
sourceField = separatorIndex >= 0
? variable.VariableCode[(separatorIndex + 1)..]
: variable.VariableCode;
}
return sourceField?.ToUpperInvariant() switch
{
"FULLNAME" or "FULL_NAME" or "NAME" => nameof(ObTaskEmployeeInfo.EmployeeName),
"MOBILE" or "MOBILEPHONE" or "MOBILE_PHONE" => nameof(ObTaskEmployeeInfo.Phone),
"IDNUMBER" or "ID_NUMBER" or "IDENTITYNUMBER" => nameof(ObTaskEmployeeInfo.IdCardNumber),
_ => sourceField
};
}
private async Task InsertRelations(long templateId, OnboardingTemplateSaveInput input)
{
var positions = input.PositionIds.Select(positionId => new ObOnboardingTemplatePosition
@@ -342,20 +277,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
}).ToList();
await _db.Insertable(contracts).ExecuteCommandAsync();
if (input.FormFields.Count > 0)
{
var fields = input.FormFields.Select(item => new ObOnboardingTemplateFormField
{
Id = global::SimpleAdmin.Core.Utils.CommonUtils.GetSingleId(),
OnboardingTemplateId = templateId,
FieldId = item.FieldId,
Required = item.Required,
SortCode = item.SortCode
}).ToList();
await _db.Insertable(fields).ExecuteCommandAsync();
}
if (input.Materials.Count > 0)
if (input.Materials != null && input.Materials.Count > 0)
{
var materials = input.Materials.Select(item => new ObOnboardingTemplateMaterial
{
@@ -377,9 +299,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
await _db.Deleteable<ObOnboardingTemplateContract>()
.Where(item => item.OnboardingTemplateId == templateId)
.ExecuteCommandAsync();
await _db.Deleteable<ObOnboardingTemplateFormField>()
.Where(item => item.OnboardingTemplateId == templateId)
.ExecuteCommandAsync();
await _db.Deleteable<ObOnboardingTemplateMaterial>()
.Where(item => item.OnboardingTemplateId == templateId)
.ExecuteCommandAsync();
@@ -405,9 +324,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
var contracts = await _db.Queryable<ObOnboardingTemplateContract>()
.Where(item => templateIds.Contains(item.OnboardingTemplateId))
.ToListAsync();
var fields = await _db.Queryable<ObOnboardingTemplateFormField>()
.Where(item => templateIds.Contains(item.OnboardingTemplateId))
.ToListAsync();
var materials = await _db.Queryable<ObOnboardingTemplateMaterial>()
.Where(item => templateIds.Contains(item.OnboardingTemplateId))
.ToListAsync();
@@ -432,7 +348,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
.Where(name => !string.IsNullOrWhiteSpace(name))
.ToList(),
ContractCount = contracts.Count(item => item.OnboardingTemplateId == template.Id),
FormFieldCount = fields.Count(item => item.OnboardingTemplateId == template.Id),
FormFieldCount = 0,
MaterialCount = materials.Count(item => item.OnboardingTemplateId == template.Id)
};
}).ToList();