using FlexJobApi.Core;
|
using Furion.DatabaseAccessor;
|
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 ElectronSignSettingQueryHandler(
|
IRepository<ElectronSignSetting> rep,
|
IRepository<EnterpriseElectronSignSetting> repEnterpriseElectronSignSetting
|
) :
|
IRequestHandler<GetEnabledElectronSignSettingsQuery, List<GetEnabledElectronSignSettingsQueryResultItem>>
|
{
|
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<List<GetEnabledElectronSignSettingsQueryResultItem>> Handle(GetEnabledElectronSignSettingsQuery request, CancellationToken cancellationToken)
|
{
|
var logier = JwtUtils.GetCurrentLogier();
|
var q = rep.AsQueryable().AsNoTracking();
|
if (request.All != true)
|
{
|
q = q.Where(it => !it.IsDisabled);
|
}
|
if (logier.Type == EnumUserType.Enterprise)
|
{
|
request.EnterpriseId = logier.EnterpriseId;
|
}
|
var models = await q
|
.ProjectToType<GetEnabledElectronSignSettingsQueryResultItem>()
|
.ToListAsync();
|
if (request.EnterpriseId.HasValue)
|
{
|
var accesses = await repEnterpriseElectronSignSetting.AsQueryable()
|
.Where(it => it.EnterpriseId == request.EnterpriseId)
|
.Select(it => it.ElectronSignAccess)
|
.ToListAsync();
|
foreach (var model in models)
|
{
|
model.IsDisabled = !accesses.Contains(model.Access);
|
}
|
}
|
return models;
|
}
|
}
|
}
|