using F9WebAiTest.Application.Dtos.SYS.Reports; using F9WebAiTest.Application.Interfaces.Repositories.SYS.Employees; using MediatR; namespace F9WebAiTest.Application.CQRS.SYS.Reports.Queries; /// 职工花名册报表数据查询(示例,对应 DsName = RepDt_Sys_Users) public record GetEmployeeDirectoryRepQuery(long DepId, string Like) : IRequest; public class GetEmployeeDirectoryRepQueryHandler : IRequestHandler { private readonly IEmployeeReadRepository _readRepository; public GetEmployeeDirectoryRepQueryHandler(IEmployeeReadRepository readRepository) { _readRepository = readRepository; } public async Task Handle(GetEmployeeDirectoryRepQuery query, CancellationToken cancellationToken) { var dto = new ReportDto_DataSource { Report_Data = new Dictionary() }; // 1. 通过仓储查询职工数据(部门含子部门) var page = await _readRepository.GetPagedAsync(query.DepId, 0, null, null, string.IsNullOrWhiteSpace(query.Like) ? "" : query.Like, 1, 1000); // 2. 部门名称(查询条件展示用) var depName = query.DepId > 0 ? await _readRepository.GetDepNameAsync(query.DepId) : ""; // 3. 明细数据:属性名须与 .grf 模板 DetailGrid.Recordset.Field 一致 var rows = new List(); foreach (var e in page.Items) { rows.Add(new { EmployeeCode = e.Code ?? "", EmployeeName = e.Name ?? "", Gender = e.Gender ?? "", DepName = e.DepName ?? "", WorktypeName = e.WorktypeName ?? "", Phone = e.Phone ?? "", RuzhiDate = e.RuzhiDate?.ToString("yyyy-MM-dd") ?? "" }); } // 4. 报表参数(模板以 StaticBox 的 Parameter 属性引用) var mainData = new ReportDataDto_Data { Field_Data = rows }; mainData.Parameter_Data = new { 部门 = string.IsNullOrWhiteSpace(depName) ? "(全部)" : depName, 关键字 = string.IsNullOrWhiteSpace(query.Like) ? "(全部)" : query.Like, 记录数 = page.Total, 查询时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; dto.Report_Data.Add("main", mainData); return dto; } }