68 lines
2.4 KiB
C#
68 lines
2.4 KiB
C#
namespace SimpleAdmin.Application;
|
|
|
|
/// <summary>
|
|
/// 生成并读取入职登记表内置员工字段的任务级必填快照。
|
|
/// </summary>
|
|
internal static class OnboardingEmployeeFieldRequirementSnapshot
|
|
{
|
|
private const string EmployeeVariablePrefix = "employee.";
|
|
|
|
/// <summary>
|
|
/// 根据当前内置员工变量配置创建一份任务快照。
|
|
/// </summary>
|
|
public static async Task<List<ObTaskFormRequirement>> BuildFromCurrentDefinitions(
|
|
SqlSugarScope db,
|
|
long taskId)
|
|
{
|
|
var definitions = await db.Queryable<ObVariableDefinition>()
|
|
.Where(item => item.IsBuiltIn
|
|
&& item.VariableCategory == ContractVariableType.Employee)
|
|
.OrderBy(item => item.SortCode)
|
|
.OrderBy(item => item.Id)
|
|
.ToListAsync();
|
|
|
|
return definitions.Select(definition => new ObTaskFormRequirement
|
|
{
|
|
Id = global::SimpleAdmin.Core.Utils.CommonUtils.GetSingleId(),
|
|
TaskId = taskId,
|
|
FieldId = definition.Id,
|
|
FieldCode = definition.VariableCode,
|
|
FieldName = definition.VariableName,
|
|
DataType = definition.DataType,
|
|
Required = definition.Required,
|
|
SortCode = definition.SortCode
|
|
}).ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取任务冻结配置;历史任务没有员工字段快照时使用当前配置兼容。
|
|
/// </summary>
|
|
public static async Task<List<ObTaskFormRequirement>> GetForTask(
|
|
SqlSugarScope db,
|
|
long taskId)
|
|
{
|
|
var snapshots = await db.Queryable<ObTaskFormRequirement>()
|
|
.Where(item => item.TaskId == taskId)
|
|
.OrderBy(item => item.SortCode)
|
|
.ToListAsync();
|
|
if (snapshots.Any(IsEmployeeField))
|
|
return snapshots;
|
|
|
|
var compatibilitySnapshots = await BuildFromCurrentDefinitions(db, taskId);
|
|
if (snapshots.Count == 0)
|
|
return compatibilitySnapshots;
|
|
|
|
snapshots.AddRange(compatibilitySnapshots);
|
|
return snapshots.OrderBy(item => item.SortCode).ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 判断快照是否对应入职登记表内置员工字段。
|
|
/// </summary>
|
|
public static bool IsEmployeeField(ObTaskFormRequirement requirement)
|
|
{
|
|
return requirement?.FieldCode?.StartsWith(
|
|
EmployeeVariablePrefix,
|
|
StringComparison.OrdinalIgnoreCase) == true;
|
|
}
|
|
} |