namespace SimpleAdmin.Application; /// /// 生成并读取入职登记表内置员工字段的任务级必填快照。 /// internal static class OnboardingEmployeeFieldRequirementSnapshot { private const string EmployeeVariablePrefix = "employee."; /// /// 根据当前内置员工变量配置创建一份任务快照。 /// public static async Task> BuildFromCurrentDefinitions( SqlSugarScope db, long taskId) { var definitions = await db.Queryable() .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(); } /// /// 读取任务冻结配置;历史任务没有员工字段快照时使用当前配置兼容。 /// public static async Task> GetForTask( SqlSugarScope db, long taskId) { var snapshots = await db.Queryable() .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(); } /// /// 判断快照是否对应入职登记表内置员工字段。 /// public static bool IsEmployeeField(ObTaskFormRequirement requirement) { return requirement?.FieldCode?.StartsWith( EmployeeVariablePrefix, StringComparison.OrdinalIgnoreCase) == true; } }