namespace SimpleAdmin.Application; public class OnboardingVariableDefinitionService : IOnboardingVariableDefinitionService { private readonly SqlSugarScope _db; private static bool _initialized = false; private static readonly object _lock = new(); public OnboardingVariableDefinitionService() { _db = DbContext.DB; } public async Task> Page(OnboardingVariableDefinitionPageInput input) { return await _db.Queryable() .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), it => it.VariableCode.Contains(input.Keyword) || it.VariableName.Contains(input.Keyword)) .WhereIF(!string.IsNullOrWhiteSpace(input.VariableCategory), it => it.VariableCategory == input.VariableCategory) .OrderBy(it => it.SortCode) .OrderBy(it => it.Id) .ToPagedListAsync(input.PageNum, input.PageSize); } public async Task> ListAll() { return await _db.Queryable() .OrderBy(it => it.SortCode) .OrderBy(it => it.Id) .ToListAsync(); } public async Task Add(OnboardingVariableDefinitionAddInput input) { var code = input.VariableCode.Trim(); var exists = await _db.Queryable().AnyAsync(it => it.VariableCode == code); if (exists) throw Oops.Bah($"变量编码“{code}”已存在"); var entity = input.Adapt(); entity.VariableCode = code; entity.IsBuiltIn = false; await _db.Insertable(entity).ExecuteCommandAsync(); } public async Task Edit(OnboardingVariableDefinitionEditInput input) { var entity = await _db.Queryable().InSingleAsync(input.Id) ?? throw Oops.Bah("变量不存在"); entity.VariableName = input.VariableName; entity.DataType = input.DataType ?? "string"; entity.DefaultValue = input.DefaultValue; entity.Required = input.Required; entity.SortCode = input.SortCode; entity.Remark = input.Remark; if (!entity.IsBuiltIn) { entity.VariableCategory = input.VariableCategory; } await _db.Updateable(entity).ExecuteCommandAsync(); } public async Task Delete(BaseIdListInput input) { if (input.Ids.Count == 0) return; var hasBuiltIn = await _db.Queryable() .Where(it => input.Ids.Contains(it.Id) && it.IsBuiltIn) .AnyAsync(); if (hasBuiltIn) throw Oops.Bah("系统内置的标准入职登记表变量不能删除"); await _db.Deleteable() .Where(it => input.Ids.Contains(it.Id)) .ExecuteCommandAsync(); } }