using System.Reflection; using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; using Dlhis.Entity.Basic.Dto; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Sys.Entities; using Dlhis.Sys.Api; using Dlhis.Sys.Api.Response; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils.Extensions; using Mapster; namespace Dlhis.Basic.Organization.Services.Implements; public class FactorySettingService : IFactorySettingService { private readonly IDbContext _dbContext; private readonly ITenantApi _tenantApi; public FactorySettingService(IDbContext dbContext, ITenantApi tenantApi) { _dbContext = dbContext; _tenantApi = tenantApi; } public async Task> GetListAsync(bool usePermission) { return await GetFactorySettingsAsync(null, usePermission); } public async Task SaveAsync(FactorySettingSaveRequest request) { var setting = await _dbContext.Queryable().Where(x => request.Factory == x.TenantId).SingleAsync(); if (setting == null) { setting = request.Adapt(); setting.TenantId = request.Factory; await _dbContext.InsertAsync(setting); } else { request.Adapt(setting); setting.TenantId = request.Factory; await _dbContext.UpdateAsync(setting); } } public async Task GetFactorySettingAsync(string factory, bool usePermission) { var settings = await GetFactorySettingsAsync(factory, usePermission); var setting = settings.FirstOrDefault() ?? new FactorySettingResponse(); setting.UserQrCodeExpiration ??= 60; setting.FaceImageDetection ??= new FaceImageDetectionDto { Enable = true, Detections = typeof(FaceQualityTypeEnumType).GetFields(BindingFlags.Public | BindingFlags.Static).Select(x => new FaceImageDetection { Type = Enum.Parse(x!.GetValue(null)!.ToString()!), Level = FaceQualityLevelEnumType.Medium }).ToList() }; return setting; } //************************************************************************************************************************************************************ private async Task> GetFactorySettingsAsync(string factory, bool usePermission) { List factories; if (factory.IsPresent()) { factories = new List { new() { Code = factory } }; } else { if (usePermission) { factories = await _tenantApi.GetMyTenantsAsync(); } else { factories = await _tenantApi.GetTenantsInternalAsync(); } } var factoryCodes = factories.Where(x => x.PCode.IsPresent()).Select(x => x.Code).ToList(); var settings = await _dbContext.Queryable() .Where(x => factoryCodes.Contains(x.TenantId)) .ToListAsync(); return factories.Select(item => { var currentFactory = factories.FirstOrDefault(x => x.Code == item.Code); var currentSetting = settings.FirstOrDefault(x => x.TenantId == item.Code); return new FactorySettingResponse { Factory = currentFactory?.Code, FactoryName = currentFactory?.Name, EnableOutsourceDown = currentSetting?.EnableOutsourceDown ?? false, UserQrCodeExpiration = currentSetting?.UserQrCodeExpiration, FaceImageDetection = currentSetting?.FaceImageDetection ?? new FaceImageDetectionDto { Enable = true, Detections = typeof(FaceQualityTypeEnumType).GetFields(BindingFlags.Public | BindingFlags.Static).Select(x => new FaceImageDetection { Type = Enum.Parse(x!.GetValue(null)!.ToString()!), Level = FaceQualityLevelEnumType.Medium }).ToList() }, NoRecordAutoResignOutsourceDays = currentSetting?.NoRecordAutoResignOutsourceDays ?? 30 }; }).ToList(); } }