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
|
{
|
/// <summary>
|
/// 同步电子签配置
|
/// </summary>
|
public class SyncElectronSignSettingsCommandHandler(
|
IRepository<ElectronSignSetting> rep,
|
IRepository<EnterpriseElectronSignSetting> repEnterpriseElectronSignSetting
|
) :
|
IRequestHandler<SyncElectronSignSettingsCommand, bool>,
|
IRequestHandler<CheckElectronSignAccessEnabledsCommand, bool>
|
{
|
private readonly IRepository<ElectronSignSetting> rep = rep;
|
private readonly IRepository<EnterpriseElectronSignSetting> repEnterpriseElectronSignSetting = repEnterpriseElectronSignSetting;
|
|
/// <summary>
|
/// 同步电子签配置
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<bool> 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;
|
}
|
|
/// <summary>
|
/// 校验电子签通道是否启用
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<bool> 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<EnumElectronSignAccess>();
|
var descriptions = model.Items.Where(it => disabledAccesses.Contains(it.Enum)).Select(it => it.Description).SplitJoin(",");
|
throw Oops.Oh(EnumErrorCodeType.s400, $"未开通通道:{descriptions}");
|
}
|
return true;
|
}
|
}
|
}
|