using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.UserServer.Application { /// /// 同步电子签配置 /// public class SyncElectronSignSettingsCommandHandler( IRepository rep, IRepository repEnterpriseElectronSignSetting ) : IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repEnterpriseElectronSignSetting = repEnterpriseElectronSignSetting; /// /// 同步电子签配置 /// /// /// /// public async Task Handle(SyncElectronSignSettingsCommand request, CancellationToken cancellationToken) { var accesses = request.Items.DistinctSelect(it => it.Access); var entities = await rep.AsQueryable() .Where(it => accesses.Contains(it.Access)) .ToListAsync(); foreach (var item in request.Items) { var entity = entities.FirstOrDefault(it => it.Access == item.Access); if (entity == null) { entity = new ElectronSignSetting(); item.Adapt(entity); await rep.InsertAsync(entity); } else { item.Adapt(entity); await rep.UpdateAsync(entity); } } var disableds = entities.Where(it => it.IsDisabled).Select(it => it.Access).ToList(); var settings = await repEnterpriseElectronSignSetting.AsQueryable() .Where(it => disableds.Contains(it.ElectronSignAccess)) .ToListAsync(); if (settings.IsNotNull()) { await repEnterpriseElectronSignSetting.DeleteAsync(settings); } return true; } /// /// 校验电子签通道是否启用 /// /// /// /// public async Task Handle(CheckElectronSignAccessEnabledsCommand request, CancellationToken cancellationToken) { var accesses = await rep.AsQueryable().AsNoTracking() .Where(it => !it.IsDisabled) .Select(it => it.Access) .ToListAsync(cancellationToken); var disabledAccesses = request.Accesses.Where(it => !accesses.Contains(it)).ToList(); if (disabledAccesses.IsNotNull()) { var model = await EnumUtils.GetModel(); var descriptions = model.Items.Where(it => disabledAccesses.Contains(it.Enum)).Select(it => it.Description).SplitJoin(","); throw Oops.Oh(EnumErrorCodeType.s400, $"未开通通道:{descriptions}"); } return true; } } }