YD_XinWei.Api/YD_XinWei/Services/Impl/LargeScreenService.cs

73 lines
2.3 KiB
C#
Raw Permalink Normal View History

2025-07-30 14:32:09 +08:00
using AutoMapper;
using Microsoft.EntityFrameworkCore;
using VOL.Entity.DomainModels.XinWei;
using YD_XinWei.Api.Context;
using YD_XinWei.Api.Services.Interface;
using YD_XinWei.Commons.Dto.LargeScreen;
using YD_XinWei.Commons.MemoryCaches;
namespace YD_XinWei.Api.Services.Impl
{
/// <summary>
/// 大屏服务
/// </summary>
public class LargeScreenService : ILargeScreenService
{
public SmartSportsContext _sportsContext;
private readonly IMapper _mapper;
private readonly ICacheService _caching;
/// <summary>
/// 构造
/// </summary>
/// <param name="sportsContext"></param>
/// <param name="mapper"></param>
public LargeScreenService(SmartSportsContext sportsContext, IMapper mapper, ICacheService caching)
{
_sportsContext = sportsContext;
_mapper = mapper;
_caching = caching;
}
/// <summary>
/// 项目成绩大屏数据
/// </summary>
/// <param name="orgId"></param>
/// <returns></returns>
public async Task<LargeScreenDto> ItemResultLargeScreenData(int orgId)
{
var res = new LargeScreenDto();
var schoolCode = _caching.Get(orgId.ToString());
if (string.IsNullOrWhiteSpace(schoolCode))
{
schoolCode = await _sportsContext.School.Where(x => x.Id == orgId).Select(x => x.SchoolCode).FirstAsync();
_caching.Add(orgId.ToString(), schoolCode);
}
var sportsTestDataKey = $"SportsTestData_{schoolCode}";
var studentInfo = await _sportsContext.Student.Where(x => x.SchoolCode == schoolCode).Select(x => x.Sex).ToListAsync();
res.BasicInfo.FemaleCount = studentInfo.Count(x => x == 2);
res.BasicInfo.MaleCount = studentInfo.Count(x => x == 1);
var sportsTestData = _caching.Get<List<XW_SportsTestData>>(sportsTestDataKey);
if (sportsTestData == null || sportsTestData.Count == 0)
{
sportsTestData = await _sportsContext.XW_SportsTestData.Where(x => x.OrgId == orgId).ToListAsync();
_caching.AddObject(sportsTestDataKey, sportsTestData, 3600);
}
return res;
}
}
}