using AutoMapper;
using OASystem.Domain.Entities.PersonnelModule;
using OASystem.Domain.ViewModels.PersonnelModule;
using OASystem.Infrastructure.Repositories.System;
namespace OASystem.Infrastructure.Repositories.PersonnelModule
{
///
/// 公司日常KPI考核仓储
///
public class CompanyDailyKpiRepository : BaseRepository
{
private readonly IMapper _mapper;
private JsonView _jv;
public CompanyDailyKpiRepository(SqlSugarClient sqlSugar,
IMapper mapper,
ApprovalProcessRepository approvalProcessRep)
: base(sqlSugar)
{
_mapper = mapper;
_jv = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
}
///
/// 绩效模板数据(保持原方法签名)
///
public async Task<(bool isSuccess, string msg, List data)> KpiTemplateDataAsync(string depName, string jobName)
{
var result = new List();
// 获取配置
var config = await _sqlSugar.Queryable()
.Where(x => x.IsDel == 0 && x.Id == 132)
.FirstAsync();
if (config?.Remark == null)
return (false, "绩效考核-数据类型ID存储为空", result);
var typeIds = JsonSerializer.Deserialize>(config.Remark);
if (typeIds?.Any() != true)
return (false, "绩效考核-数据类型ID存储为空", result);
// 构建查询
var query = _sqlSugar.Queryable()
.LeftJoin((sd, sdt) => sd.STid == sdt.Id)
.Where((sd, sdt) => sd.IsDel == 0 && typeIds.Contains(sd.STid));
// 条件过滤
if (!string.IsNullOrWhiteSpace(depName))
query = query.Where((sd, sdt) => sdt.Name.Contains(depName));
if (!string.IsNullOrWhiteSpace(jobName))
query = query.Where((sd, sdt) => sdt.Name.Contains(jobName));
// 查询数据
var data = await query
.Select((sd, sdt) => new
{
KpiTypeId = sd.STid,
KpiTypeName = sdt.Name,
KpiId = sd.Id,
KpiContent = sd.Remark,
KpiSort = sd.Name
})
.ToListAsync();
if (data?.Any() != true)
return (false, "绩效考核模板信息为空", result);
// 分组处理
result = data
.GroupBy(x => new { x.KpiTypeId, x.KpiTypeName })
.Select(g => new KpiTempTypeInfo()
{
TypeId = g.Key.KpiTypeId,
TypeName = g.Key.KpiTypeName,
Contents = g
.OrderBy(x => int.TryParse(x.KpiSort, out int s) ? s : int.MaxValue)
.ThenBy(x => x.KpiSort)
.Select(x => new KpiTempContentInfo(x.KpiId, x.KpiContent, x.KpiSort))
.ToList()
})
.Where(g => g.Contents.Any())
.OrderBy(g => g.TypeId)
.ToList();
return (true, "操作成功", result);
}
///
/// 获取部门和岗位
///
public async Task