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
@@ -26,12 +26,8 @@ public class OnboardingContractSnapshotService : IOnboardingContractSnapshotServ
?? throw Oops.Bah("入职公司不存在");
employeeInfo ??= await _db.Queryable<ObTaskEmployeeInfo>()
.FirstAsync(item => item.TaskId == taskId);
var dynamicValues = await _db.Queryable<ObTaskFormValue>()
.Where(item => item.TaskId == taskId)
.ToListAsync();
var dynamicValueMap = dynamicValues
.GroupBy(item => item.FieldCode, StringComparer.OrdinalIgnoreCase)
.ToDictionary(group => group.Key, group => group.Last().FieldValue, StringComparer.OrdinalIgnoreCase);
// 员工补充合同变量统一从 CustomVariablesJson 读取,不再访问已移除的旧动态字段表。
var dynamicValueMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
var contracts = await _db.Queryable<ObTaskContract>()
.Where(item => item.TaskId == taskId)
.ToListAsync();
@@ -110,6 +106,23 @@ public class OnboardingContractSnapshotService : IOnboardingContractSnapshotServ
var fixedValue = GetPropertyValue(employeeInfo, ResolveEmployeeField(sourceField), definition.FormatRule);
if (!string.IsNullOrWhiteSpace(fixedValue))
return fixedValue;
// 检查员工自定义补充变量 JSON
if (!string.IsNullOrWhiteSpace(employeeInfo?.CustomVariablesJson))
{
try
{
using var doc = global::System.Text.Json.JsonDocument.Parse(employeeInfo.CustomVariablesJson);
if (doc.RootElement.TryGetProperty(sourceField, out var prop)
|| doc.RootElement.TryGetProperty(definition.VariableCode, out prop))
{
var str = prop.GetString();
if (!string.IsNullOrWhiteSpace(str)) return str;
}
}
catch { }
}
return dynamicValues.TryGetValue(sourceField, out var dynamicValue)
? dynamicValue
: definition.DefaultValue;
@@ -184,8 +197,10 @@ public class OnboardingContractSnapshotService : IOnboardingContractSnapshotServ
"LEGALNAME" or "LEGAL_NAME" or "COMPANYLEGALNAME" => nameof(ObCompany.LegalName),
"UNIFIEDSOCIALCREDITCODE" or "UNIFIED_SOCIAL_CREDIT_CODE" => nameof(ObCompany.UnifiedSocialCreditCode),
"LEGALREPRESENTATIVE" or "LEGAL_REPRESENTATIVE" => nameof(ObCompany.LegalRepresentative),
"REGISTEREDADDRESS" or "REGISTERED_ADDRESS" => nameof(ObCompany.RegisteredAddress),
"CONTACTPHONE" or "CONTACT_PHONE" => nameof(ObCompany.ContactPhone),
"ADDRESS" or "COMPANYADDRESS" or "COMPANY_ADDRESS"
or "REGISTEREDADDRESS" or "REGISTERED_ADDRESS" => nameof(ObCompany.RegisteredAddress),
"PHONE" or "COMPANYPHONE" or "COMPANY_PHONE"
or "CONTACTPHONE" or "CONTACT_PHONE" => nameof(ObCompany.ContactPhone),
_ => sourceField
};
}