using AutoMapper; using AutoMapper.Internal; using Castle.DynamicProxy.Generators; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using VOL.Business.IServices; using VOL.Business.IServices.Norm; using VOL.Core.CacheManager; using VOL.Core.Extensions.AutofacManager; using VOL.Core.ManageUser; using VOL.Entity.DomainModels; using VOL.Entity.DomainModels.XinWei; using VOL.Entity.Enum; using VOL.Model.School.Response; using VOL.System.IRepositories; using YD_XinWei.Api.SmartSportsEntitys; namespace VOL.Business.Services.Norm { public class CacheQueryService : ICacheQueryService, IDependency { #region 初始化 private readonly ICacheService _cacheService; private readonly IMapper _mapper; private readonly IN_SportsTestResultRepository _sportsTestResultRepository; [ActivatorUtilitiesConstructor] public CacheQueryService(IMapper mapper, IN_SportsTestResultRepository sportsTestResultRepository, ICacheService cacheService) { _mapper = mapper; _sportsTestResultRepository = sportsTestResultRepository; _cacheService = cacheService; } #endregion /// /// 获取体测成绩缓存 /// /// 查询条件 /// 模式 /// public async Task> GeSportsTestDataCacheAsync(Func queryCondition, Ai_ModeEnum? modeType) { var tenantId = UserContext.Current.TenantId; var cacheKey = $"sportsTestResults_{tenantId}"; // 从缓存中获取数据 var sportsTestResults = _cacheService.Get>(cacheKey); if (sportsTestResults == null) { var iotTestResults = await _sportsTestResultRepository .FindAsIQueryable(x => x.IsDisplay && x.SchoolCode == tenantId) .ToListAsync(); var sportsIot = _mapper.Map>(iotTestResults); var aiTestResults = await _sportsTestResultRepository.DbContext.Set ().Where(x => x.IsDisplay && x.SchoolCode == tenantId && x.DataType == SportsTestDataType.SportsTestData) .ToListAsync(); var sportsAi = _mapper.Map>(aiTestResults); //int schoolId = await _sportsTestResultRepository.DbContext.Set().Where(x => x.SchoolCode == tenantId).Select(x => x.Id).FirstOrDefaultAsync(); //var xwTestData = await _sportsTestResultRepository.DbContext.Set().Where(x => x.OrgId == schoolId).Include(x => x.StudentList).ToListAsync(); //var xwProject = await _sportsTestResultRepository.DbContext.Set().ToListAsync(); //var sportsXW = new List(); //foreach (var data in xwTestData) //{ // foreach (var stu in data.StudentList) // { // var category = xwProject.Where(x => x.ProjectId == data.ProjectId).FirstOrDefault(); // if (data.ProjectId == 2) // { // if (stu.Sex == 2) // { // category.CategoryValue = 11; // category.CategoryEnum = "MeterRun_800"; // } // } // var xwModel = new SportsTestValueModel() // { // ClassId = Convert.ToInt32(data.ClassId), // ClassName = data.ClassName, // GradeId = Convert.ToInt32(data.GradeId), // GradeName = data.GradeName, // DataSource = DataSource.XW, // ScoreTime = Convert.ToDateTime(data.CreateTime), // CategoryValue = category.CategoryValue, // CategoryEnum = category.CategoryEnum, // SchoolCode = tenantId, // Score = (float)(stu.Score ?? 0f), // Sex = (SexType)stu.Sex, // Value = (float)stu.Achievement, // StudentNo = stu.StudentNo, // TeacherId = stu.TeacherId ?? 0, // AdditionalScore = (float)(stu.PlusesScore ?? 0f) // }; // sportsXW.Add(xwModel); // } //} //sportsTestResults = sportsIot.Concat(sportsAi).Concat(sportsXW).ToList(); sportsTestResults = sportsIot.Concat(sportsAi).ToList(); sportsTestResults = sportsTestResults .GroupBy(x => new { x.StudentNo, x.CategoryValue }) .Select(g => { var latestRecord = g.OrderByDescending(x => x.ScoreTime).First(); latestRecord.Score = g.Average(x => x.Score); latestRecord.Value = g.Average(x => x.Value); latestRecord.MotionDuration = g.Sum(x => x.MotionDuration); //添加其他需要聚合运算的字段 return latestRecord; }) .ToList(); // 将结果添加到缓存,缓存时间为600秒 _cacheService.AddObject(cacheKey, sportsTestResults, 3600); } sportsTestResults = sportsTestResults.Where(x => queryCondition(x)).ToList(); // 自由模式 体测项目 if (modeType != null && modeType == Ai_ModeEnum.FreeMode) { var freeModeItemTypeList = new List() { (int)SportsTestItemType.Sit_And_Reach, (int)SportsTestItemType.OneMinuteJumpRope, (int)SportsTestItemType.One_Minute_Sit_Up, (int)SportsTestItemType.Pull_Up, }; sportsTestResults = sportsTestResults.Where(x => freeModeItemTypeList.Contains(x.CategoryValue)).ToList(); } /* // 课堂模式 体测项目 else if (modeType != null && modeType == Ai_ModeEnum.ClassRoomMode) { var classRoomModeItemTypeList = new List() { (int)SportsTestItemType.BMI, (int)SportsTestItemType.VitalCapacity, (int)SportsTestItemType.MeterRun_50, (int)SportsTestItemType.ShuttleRun_50x8, (int)SportsTestItemType.MeterRun_1000, (int)SportsTestItemType.MeterRun_800, // 立定跳远 (int)SportsTestItemType.StandingLongJump, // AI 和 IOT 共有项目 (int)SportsTestItemType.Sit_And_Reach, (int)SportsTestItemType.OneMinuteJumpRope, (int)SportsTestItemType.One_Minute_Sit_Up, (int)SportsTestItemType.Pull_Up, }; } */ return sportsTestResults; } } }