using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using NCC.Common.Filter; using NCC.Dependency; using NCC.DynamicApiController; using NCC.Extend.Models; using NCC.FriendlyException; using NCC.System.Entitys.Permission; using Microsoft.AspNetCore.Mvc; using SqlSugar; namespace NCC.Extend { /// /// 自然月内有业务事实的员工名单(与算薪扩大加载口径一致,含月中离职仍可能有事实者)。 /// [ApiDescriptionSettings(Tag = "绿纤月度业务人员", Name = "LqMonthlyEmployeeFact", Order = 202)] [Route("api/Extend/LqMonthlyEmployeeFact")] public class LqMonthlyEmployeeFactQueryService : IDynamicApiController, ITransient { private readonly ISqlSugarClient _db; public LqMonthlyEmployeeFactQueryService(ISqlSugarClient db) { _db = db; } /// /// 分页查询指定年月中出现过考勤/业绩/消耗/金三角/工资归档等事实的用户(未软删)。 /// /// 年 /// 月 1-12 /// 按姓名或账号模糊(可选) /// 分页 [HttpGet("employees")] public async Task GetEmployeesWithMonthFacts( [FromQuery] int year, [FromQuery] int month, [FromQuery] string keyword, [FromQuery] PageInputBase page) { if (year < 1990 || year > 2100 || month < 1 || month > 12) { throw NCCException.Oh("year/month 参数不合法"); } page ??= new PageInputBase(); var factIds = await LqMonthlyEmployeeFactHelper.GetUserIdsWithMonthBusinessFactsAsync(_db, year, month); if (factIds.Count == 0) { return PageResult.SqlSugarPageResult( new SqlSugarPagedList { list = new List(), pagination = new PagedModel { PageIndex = page.currentPage, PageSize = page.pageSize, Total = 0 } }); } var q = _db.Queryable() .Where(u => factIds.Contains(u.Id) && u.DeleteMark == null); if (!string.IsNullOrWhiteSpace(keyword)) { var kw = keyword.Trim(); q = q.Where(u => u.RealName.Contains(kw) || u.Account.Contains(kw)); } var paged = await q .OrderBy(u => u.RealName) .Select(u => new MonthlyEmployeeFactRowOutput { EmployeeId = u.Id, RealName = u.RealName, Account = u.Account, Gw = u.Gw, EnabledMark = u.EnabledMark, IsOnJob = u.IsOnJob }) .ToPagedListAsync(page.currentPage, page.pageSize); return PageResult.SqlSugarPageResult(paged); } /// /// 返回指定年月事实人员主键列表(不分页,供内部或其它服务联调;数据量大时慎用)。 /// [HttpGet("employee-ids")] public async Task GetEmployeeIdsWithMonthFacts([FromQuery] int year, [FromQuery] int month) { if (year < 1990 || year > 2100 || month < 1 || month > 12) { throw NCCException.Oh("year/month 参数不合法"); } var ids = await LqMonthlyEmployeeFactHelper.GetUserIdsWithMonthBusinessFactsAsync(_db, year, month); return new { total = ids.Count, employeeIds = ids }; } } }