From c1a7f8a2ffed6845c8fe0213ac74af648f7d859c Mon Sep 17 00:00:00 2001 From: tanglong <842690096@qq.com> Date: Fri, 11 Jul 2025 09:37:06 +0800 Subject: [PATCH] dd --- VOL.Ai/IServices/IAiAppService.cs | 2 +- VOL.Ai/Services/AiAppService.cs | 139 +++++++++++++++--- .../Training/I_TrainingDataService.cs | 129 +--------------- VOL.Core/Utilities/Tool.cs | 124 ++++++++++++++++ .../DomainModels/Ai/Ai_HeartRateData.cs | 9 ++ VOL.Model/Ai/Request/AiRequestDto.cs | 2 + VOL.Model/Ai/Request/Ai_Request.cs | 2 + VOL.WebApi/Controllers/AI/AiAppController.cs | 103 ++++++++++++- VOL.WebApi/Program.cs | 2 +- VOL.WebApi/Startup.cs | 34 ++--- 10 files changed, 381 insertions(+), 165 deletions(-) diff --git a/VOL.Ai/IServices/IAiAppService.cs b/VOL.Ai/IServices/IAiAppService.cs index 8be40b3..a0b49be 100644 --- a/VOL.Ai/IServices/IAiAppService.cs +++ b/VOL.Ai/IServices/IAiAppService.cs @@ -261,7 +261,7 @@ namespace VOL.Ai.IServices /// /// 获取课堂跳绳报告 /// - Task JumpRopeReport(HeartRateReportRequest paramDto); + Task> JumpRopeReport(HeartRateReportRequest paramDto); #endregion } diff --git a/VOL.Ai/Services/AiAppService.cs b/VOL.Ai/Services/AiAppService.cs index 104ca08..221ad54 100644 --- a/VOL.Ai/Services/AiAppService.cs +++ b/VOL.Ai/Services/AiAppService.cs @@ -23,6 +23,7 @@ using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using System.Collections.Concurrent; using VOL.Core.Services; using VOL.Model.Training.Response; +using VOL.Model.Norm.Response; namespace VOL.Ai.Services { @@ -1421,23 +1422,25 @@ namespace VOL.Ai.Services /// public async Task HeartRateReport(HeartRateReportRequest paramDto) { - var res = new GetClassReportDetailsModel(); + var res = new Ai_HeartRateReportDto(); - var query = from hrd in _teacherRepository.DbContext.Set() - where hrd.ClassRoomRecordId == paramDto.ClassRoomRecordId && hrd. + var query = from hrd in _teacherRepository.DbContext.Set() + where hrd.ClassRoomRecordId == paramDto.ClassRoomRecordId + && (paramDto.ClassRoomStageId <= 0 || hrd.ClassroomStageId == paramDto.ClassRoomStageId) select hrd; + var heartRateDataList = await query.ToListAsync(); if (heartRateDataList.Count == 0) return res; var classRoom = await _teacherRepository.DbContext.Set().Include(x => x.ClassroomStudentRecord) - .Where(x => x.SchoolCode == UserContext.Current.TenantId && x.Id == id) + .Where(x => x.SchoolCode == paramDto.SchoolCode && x.Id == paramDto.ClassRoomStageId) .FirstAsync(); var classRoomStudent = await _teacherRepository.DbContext.Set() - .Where(x => x.SchoolCode == UserContext.Current.TenantId && x.ClassRoomRecordId == id) + .Where(x => x.SchoolCode == paramDto.SchoolCode && x.Id == paramDto.ClassRoomStageId) .ToListAsync(); res.GradeAndClass = $"{classRoom.GradeName}-{classRoom.ClassName}"; @@ -1450,7 +1453,7 @@ namespace VOL.Ai.Services res.Consumption = $"{Math.Abs(heartRateDataList.Sum(x => x.Consumption ?? 0) / heartRateDataList.Count)} 千卡"; //res.Density = $"{(int)(heartRateDataList.Where(x => x.Strength > 50).Sum(x => x.Strength) / heartRateDataList.Count)} %"; - res.Density = $"{(int)CalculatePercentage(heartRateDataList.Count(x => x.Strength > 50), heartRateDataList.Count)} %"; + res.Density = $"{(int)Tool.CalculatePercentage(heartRateDataList.Count(x => x.Strength > 50), heartRateDataList.Count)} %"; res.HighIntensity = $"{heartRateDataList.Where(x => x.Strength > 50).GroupBy(x => x.StudentNo).Count()} 人"; var studentTrainingRecordList = classRoom.ClassroomStudentRecord.ToList(); @@ -1472,7 +1475,7 @@ namespace VOL.Ai.Services student.StudentName = studentTrainingData[0].StudentName; student.AvgHR = (int)(studentTrainingData.Sum(x => x.Value) / studentTrainingData.Count); - student.Density = (int)CalculatePercentage(studentTrainingData.Count(x => x.Strength > 50), studentTrainingData.Count); + student.Density = (int)Tool.CalculatePercentage(studentTrainingData.Count(x => x.Strength > 50), studentTrainingData.Count); student.Strength = (int)studentTrainingData.Average(x => x.Strength); student.Consumption = Math.Abs((int)studentTrainingData.Average(x => x.Consumption ?? 0)); @@ -1480,29 +1483,123 @@ namespace VOL.Ai.Services } } - res.HeartRateNumber = GetHeartRateNumber(heartRateDataList); - res.HeartRateTrend = GetHeartRateTrend(heartRateDataList); + res.HeartRateNumber = Tool.GetHeartRateNumber(heartRateDataList); + res.HeartRateTrend = Tool.GetHeartRateTrend(heartRateDataList); res.StudentTrainingRecordList = studentList; - //return new GetClassReportDetailsModel() - //{ - // HeartRateNumber = GetHeartRateNumber(heartRateDataList), - // HeartRateTrend = GetHeartRateTrend(heartRateDataList), - // HeartRateIntensityNumber = GetHeartRateIntensityNumber(heartRateDataList), - // TimeIntervalHeartRateIntensityNumber = GetTimeIntervalHeartRateIntensityNumber(heartRateDataList) - //}; - return res; } - public Task StudentHeartRateReport(GetStudentClassReportDetailsDto paramDto) + /// + /// 获取学生心率报告 + /// + /// + /// + public async Task StudentHeartRateReport(GetStudentClassReportDetailsDto paramDto) { - throw new NotImplementedException(); + var res = new GetStudentClassReportDetailsModel(); + + var schoolCode = UserContext.Current.TenantId; + + var query = from hrd in _teacherRepository.DbContext.Set() + where hrd.SchoolCode == schoolCode && + hrd.ClassRoomRecordId == paramDto.ClassRoomRecordId && + hrd.StudentNo == paramDto.StudentNo + select hrd; + + var heartRateDataList = await query.ToListAsync(); + + if (heartRateDataList.Count == 0) + return res; + + var student = heartRateDataList[0]; + + res.StudentNo = student.StudentNo; + res.StudentName = student.StudentName; + res.Sex = student.Sex; + res.GradeAndClass = $"{student.GradeName}-{student.ClassName}"; + + res.AvgHR = (int)(heartRateDataList.Sum(x => x.Value) / heartRateDataList.Count); + res.Density = (int)Tool.CalculatePercentage(heartRateDataList.Count(x => x.Strength > 50), heartRateDataList.Count); + res.Strength = (int)heartRateDataList.Average(x => x.Strength); + res.Consumption = Math.Abs((int)heartRateDataList.Average(x => x.Consumption ?? 0)); + + //var baseTime = heartRateDataList.Min(x => x.ScoreTime); + var baseTime = await _teacherRepository.DbContext.Set().Where(x => x.SchoolCode == schoolCode && x.ClassRoomRecordId == paramDto.ClassRoomRecordId).MinAsync(x => x.ScoreTime); + + var heartRateWithMinutes = heartRateDataList + .Select(data => new + { + Data = data, + MinuteBucket = (int)(data.ScoreTime - baseTime).TotalMinutes + }) + .ToList(); + + var maxMinute = heartRateWithMinutes.Max(x => x.MinuteBucket); + + for (int minute = 0; minute <= maxMinute; minute++) + { + var minuteData = heartRateWithMinutes + .Where(x => x.MinuteBucket == minute) + .Select(x => x.Data) + .ToList(); + + if (minuteData.Any()) + { + res.HeartRateTrend.Add(new SportsProportionData() + { + Name = $"{minute + 1} 分钟", + Datas = new List + { + new StudentSportsProportionData { + Title = "心率", + Value = (int)minuteData.Average(x => x.Value) + } + } + }); + } + } + + return res; } - public Task JumpRopeReport(HeartRateReportRequest paramDto) + /// + /// 跳绳报告 + /// + /// + /// + public async Task> JumpRopeReport(HeartRateReportRequest paramDto) { - throw new NotImplementedException(); + var rawData = await _fastJumpRopeDataRepository + .FindAsIQueryable(x => x.SchoolCode == paramDto.SchoolCode && x.ClassRoomRecordId == paramDto.ClassRoomRecordId) + .ToListAsync(); + + var result = rawData + .GroupBy(x => x.GroupId) + .Select(group => + { + var rankedStudents = group + .OrderByDescending(x => x.JumpValue ?? 0) + .Select((x, index) => new Ai_StudentJumpRopeReportListDto + { + StudentNo = x.StudentNo, + StudentName = x.StudentName, + Ranking = x.Rank ?? 0, + JumpValue = x.JumpValue + }).ToList(); + + return new Ai_JumpRopeReportDto + { + ModelType = (int)group.First().ModeType, + ModelName = group.First().ModelName, + MotionDuration = group.First().MotionDuration ?? 0, + StudentCount = rankedStudents.Count, + StudentList = rankedStudents + }; + }) + .ToList(); + + return result; } #endregion diff --git a/VOL.Business/Services/Training/I_TrainingDataService.cs b/VOL.Business/Services/Training/I_TrainingDataService.cs index d93e09a..b500819 100644 --- a/VOL.Business/Services/Training/I_TrainingDataService.cs +++ b/VOL.Business/Services/Training/I_TrainingDataService.cs @@ -2066,7 +2066,7 @@ namespace VOL.Business.Services.Training res.Consumption = $"{Math.Abs(heartRateDataList.Sum(x => x.Consumption ?? 0) / heartRateDataList.Count)} 千卡"; //res.Density = $"{(int)(heartRateDataList.Where(x => x.Strength > 50).Sum(x => x.Strength) / heartRateDataList.Count)} %"; - res.Density = $"{(int)CalculatePercentage(heartRateDataList.Count(x => x.Strength > 50), heartRateDataList.Count)} %"; + res.Density = $"{(int)Tool.CalculatePercentage(heartRateDataList.Count(x => x.Strength > 50), heartRateDataList.Count)} %"; res.HighIntensity = $"{heartRateDataList.Where(x => x.Strength > 50).GroupBy(x => x.StudentNo).Count()} 人"; var studentTrainingRecordList = classRoom.ClassroomStudentRecord.ToList(); @@ -2088,7 +2088,7 @@ namespace VOL.Business.Services.Training student.StudentName = studentTrainingData[0].StudentName; student.AvgHR = (int)(studentTrainingData.Sum(x => x.Value) / studentTrainingData.Count); - student.Density = (int)CalculatePercentage(studentTrainingData.Count(x => x.Strength > 50), studentTrainingData.Count); + student.Density = (int)Tool.CalculatePercentage(studentTrainingData.Count(x => x.Strength > 50), studentTrainingData.Count); student.Strength = (int)studentTrainingData.Average(x => x.Strength); student.Consumption = Math.Abs((int)studentTrainingData.Average(x => x.Consumption ?? 0)); @@ -2096,8 +2096,8 @@ namespace VOL.Business.Services.Training } } - res.HeartRateNumber = GetHeartRateNumber(heartRateDataList); - res.HeartRateTrend = GetHeartRateTrend(heartRateDataList); + res.HeartRateNumber = Tool.GetHeartRateNumber(heartRateDataList); + res.HeartRateTrend = Tool.GetHeartRateTrend(heartRateDataList); res.StudentTrainingRecordList = studentList; //return new GetClassReportDetailsModel() @@ -2141,7 +2141,7 @@ namespace VOL.Business.Services.Training res.GradeAndClass = $"{student.GradeName}-{student.ClassName}"; res.AvgHR = (int)(heartRateDataList.Sum(x => x.Value) / heartRateDataList.Count); - res.Density = (int)CalculatePercentage(heartRateDataList.Count(x => x.Strength > 50), heartRateDataList.Count); + res.Density = (int)Tool.CalculatePercentage(heartRateDataList.Count(x => x.Strength > 50), heartRateDataList.Count); res.Strength = (int)heartRateDataList.Average(x => x.Strength); res.Consumption = Math.Abs((int)heartRateDataList.Average(x => x.Consumption ?? 0)); @@ -2184,113 +2184,6 @@ namespace VOL.Business.Services.Training return res; } - /// - /// 心率个数 - /// - /// - /// - public List GetHeartRateNumber(List heartRateDataList) - { - var result = new List(); - - var maleData = heartRateDataList.Where(x => x.Sex == SexType.Male).ToList(); - var femaleData = heartRateDataList.Where(x => x.Sex == SexType.Female).ToList(); - - var m_avg = maleData.Any() ? (int)maleData.Average(x => x.Value) : 0; - var f_avg = femaleData.Any() ? (int)femaleData.Average(x => x.Value) : 0; - - var avgData = new SportsProportionData - { - Name = "平均", - Datas = new List - { - new StudentSportsProportionData { Title = "男", Value = m_avg }, - new StudentSportsProportionData { Title = "女", Value = f_avg } - } - }; - - var m_max = maleData.Any() ? maleData.Max(x => x.Value) : 0; - var f_max = femaleData.Any() ? femaleData.Max(x => x.Value) : 0; - - var maxData = new SportsProportionData - { - Name = "最高", - Datas = new List - { - new StudentSportsProportionData { Title = "男", Value = m_max }, - new StudentSportsProportionData { Title = "女", Value = f_max } - } - }; - - var m_min = maleData.Any() ? maleData.Min(x => x.Value) : 0; - var f_min = femaleData.Any() ? femaleData.Min(x => x.Value) : 0; - - var minData = new SportsProportionData - { - Name = "最低", - Datas = new List - { - new StudentSportsProportionData { Title = "男", Value = m_min }, - new StudentSportsProportionData { Title = "女", Value = f_min } - } - }; - - result.Add(avgData); - result.Add(minData); - result.Add(maxData); - - return result; - } - - /// - /// 心率变化趋势 - /// - /// - /// - public List GetHeartRateTrend(List heartRateDataList) - { - var result = new List(); - - if (heartRateDataList == null || !heartRateDataList.Any()) - return result; - - var baseTime = heartRateDataList.Min(x => x.ScoreTime); - - var heartRateWithMinutes = heartRateDataList - .Select(data => new - { - Data = data, - MinuteBucket = (int)(data.ScoreTime - baseTime).TotalMinutes - }) - .ToList(); - - var maxMinute = heartRateWithMinutes.Max(x => x.MinuteBucket); - - for (int minute = 0; minute <= maxMinute; minute++) - { - var minuteData = heartRateWithMinutes - .Where(x => x.MinuteBucket == minute) - .Select(x => x.Data) - .ToList(); - - if (minuteData.Any()) - { - result.Add(new SportsProportionData() - { - Name = $"{minute + 1} 分钟", // Adding 1 to make it 1-based instead of 0-based - Datas = new List - { - new StudentSportsProportionData { - Title = "心率", - Value = (int)minuteData.Average(x => x.Value) - } - } - }); - } - } - - return result; - } /// /// 心率各强度达成人数 @@ -2422,18 +2315,6 @@ namespace VOL.Business.Services.Training return result; } - /// - /// 通用百分比计算方法 - /// - /// - /// - /// - private double CalculatePercentage(int count, int totalCount) - { - if (totalCount == 0) return 0; - return Math.Round((double)count / totalCount * 100, 0); - } - #endregion #region 用户训练数据 diff --git a/VOL.Core/Utilities/Tool.cs b/VOL.Core/Utilities/Tool.cs index 2fb8618..70a47be 100644 --- a/VOL.Core/Utilities/Tool.cs +++ b/VOL.Core/Utilities/Tool.cs @@ -14,7 +14,9 @@ using System.Text; using System.Threading.Tasks; using VOL.Core.Extensions; using VOL.Core.Services; +using VOL.Entity.DomainModels; using VOL.Entity.Enum; +using VOL.Model.Norm.Response; namespace VOL.Core.Utilities { @@ -687,5 +689,127 @@ namespace VOL.Core.Utilities return chineseNumbers[tens] + "十" + (units == 0 ? "" : chineseNumbers[units]); } + + + + /// + /// 心率个数 + /// + /// + /// + public static List GetHeartRateNumber(List heartRateDataList) + { + var result = new List(); + + var maleData = heartRateDataList.Where(x => x.Sex == SexType.Male).ToList(); + var femaleData = heartRateDataList.Where(x => x.Sex == SexType.Female).ToList(); + + var m_avg = maleData.Any() ? (int)maleData.Average(x => x.Value) : 0; + var f_avg = femaleData.Any() ? (int)femaleData.Average(x => x.Value) : 0; + + var avgData = new SportsProportionData + { + Name = "平均", + Datas = new List + { + new StudentSportsProportionData { Title = "男", Value = m_avg }, + new StudentSportsProportionData { Title = "女", Value = f_avg } + } + }; + + var m_max = maleData.Any() ? maleData.Max(x => x.Value) : 0; + var f_max = femaleData.Any() ? femaleData.Max(x => x.Value) : 0; + + var maxData = new SportsProportionData + { + Name = "最高", + Datas = new List + { + new StudentSportsProportionData { Title = "男", Value = m_max }, + new StudentSportsProportionData { Title = "女", Value = f_max } + } + }; + + var m_min = maleData.Any() ? maleData.Min(x => x.Value) : 0; + var f_min = femaleData.Any() ? femaleData.Min(x => x.Value) : 0; + + var minData = new SportsProportionData + { + Name = "最低", + Datas = new List + { + new StudentSportsProportionData { Title = "男", Value = m_min }, + new StudentSportsProportionData { Title = "女", Value = f_min } + } + }; + + result.Add(avgData); + result.Add(minData); + result.Add(maxData); + + return result; + } + + /// + /// 心率变化趋势 + /// + /// + /// + public static List GetHeartRateTrend(List heartRateDataList) + { + var result = new List(); + + if (heartRateDataList == null || !heartRateDataList.Any()) + return result; + + var baseTime = heartRateDataList.Min(x => x.ScoreTime); + + var heartRateWithMinutes = heartRateDataList + .Select(data => new + { + Data = data, + MinuteBucket = (int)(data.ScoreTime - baseTime).TotalMinutes + }) + .ToList(); + + var maxMinute = heartRateWithMinutes.Max(x => x.MinuteBucket); + + for (int minute = 0; minute <= maxMinute; minute++) + { + var minuteData = heartRateWithMinutes + .Where(x => x.MinuteBucket == minute) + .Select(x => x.Data) + .ToList(); + + if (minuteData.Any()) + { + result.Add(new SportsProportionData() + { + Name = $"{minute + 1} 分钟", + Datas = new List + { + new StudentSportsProportionData { + Title = "心率", + Value = (int)minuteData.Average(x => x.Value) + } + } + }); + } + } + + return result; + } + + /// + /// 通用百分比计算方法 + /// + /// + /// + /// + public static double CalculatePercentage(int count, int totalCount) + { + if (totalCount == 0) return 0; + return Math.Round((double)count / totalCount * 100, 0); + } } } \ No newline at end of file diff --git a/VOL.Entity/DomainModels/Ai/Ai_HeartRateData.cs b/VOL.Entity/DomainModels/Ai/Ai_HeartRateData.cs index e7a9536..9db1178 100644 --- a/VOL.Entity/DomainModels/Ai/Ai_HeartRateData.cs +++ b/VOL.Entity/DomainModels/Ai/Ai_HeartRateData.cs @@ -45,6 +45,15 @@ namespace VOL.Entity.DomainModels [Column(TypeName = "int")] public int ClassRoomRecordId { get; set; } + /// + /// 阶段Id + /// + [Display(Name = "阶段Id")] + [Comment("阶段Id")] + [Column(TypeName = "int")] + public int ClassroomStageId { get; set; } + + /// /// 年级编号 /// diff --git a/VOL.Model/Ai/Request/AiRequestDto.cs b/VOL.Model/Ai/Request/AiRequestDto.cs index c5b674e..9b96826 100644 --- a/VOL.Model/Ai/Request/AiRequestDto.cs +++ b/VOL.Model/Ai/Request/AiRequestDto.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -14,6 +15,7 @@ namespace VOL.Model.Ai /// /// AI设备的唯一编码 /// + [Required(ErrorMessage = "设备Code不能为空")] public string Code { get; set; } } } diff --git a/VOL.Model/Ai/Request/Ai_Request.cs b/VOL.Model/Ai/Request/Ai_Request.cs index a617da4..f05f4f1 100644 --- a/VOL.Model/Ai/Request/Ai_Request.cs +++ b/VOL.Model/Ai/Request/Ai_Request.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -15,6 +16,7 @@ namespace VOL.Model.Ai /// /// 学校Code /// + [Required(ErrorMessage = "学校Code不能为空")] public string SchoolCode { get; set; } } public class Ai_StudentListRequest : Ai_Request diff --git a/VOL.WebApi/Controllers/AI/AiAppController.cs b/VOL.WebApi/Controllers/AI/AiAppController.cs index bb681fa..844b2ea 100644 --- a/VOL.WebApi/Controllers/AI/AiAppController.cs +++ b/VOL.WebApi/Controllers/AI/AiAppController.cs @@ -25,6 +25,7 @@ using VOL.Model.Ai.Request; using VOL.Model.Ai.Response; using VOL.Model.IOT.Request; using VOL.Model.IOT.Response; +using VOL.Model.Training.Response; using VOL.Order; using VOL.WebApi.Filter; @@ -437,8 +438,10 @@ namespace VOL.WebApi.Controllers return result; } + #region 2.0 接口 + /// - /// Ai一体机扫描那登录轮询 + /// Ai一体机扫描登录轮询 /// /// /// @@ -450,6 +453,19 @@ namespace VOL.WebApi.Controllers return result; } + /// + /// 用户名密码登录 + /// + /// + /// + [HttpPost(nameof(Login))] + public async Task Login([FromBody] Ai_LoginRequest paramDto) + { + var result = await _aiAppService.Login(paramDto); + + return result; + } + /// /// 退出登录 /// @@ -462,5 +478,90 @@ namespace VOL.WebApi.Controllers return result; } + + /// + /// 获取课堂记录列表 + /// + [HttpGet(nameof(ClassRoomRecordPageList))] + [ServiceFilter(typeof(ValidateDeviceFilter))] + public async Task> ClassRoomRecordPageList([FromQuery] ClassRoomRecordPageListRequest paramDto) + { + var result = await _aiAppService.ClassRoomRecordPageList(paramDto); + return result; + } + + /// + /// 获取课堂阶段列表 + /// + [HttpGet(nameof(ClassroomStagePageList))] + [ServiceFilter(typeof(ValidateDeviceFilter))] + public async Task> ClassroomStagePageList([FromQuery] Ai_Request paramDto) + { + var result = await _aiAppService.ClassroomStagePageList(paramDto); + return result; + } + + /// + /// 添加课堂设置 + /// + /// + /// + [HttpPost(nameof(AddClassroomSetting))] + [ServiceFilter(typeof(ValidateDeviceFilter))] + public async Task AddClassroomSetting([FromBody] AddClassroomSettingRequest paramDto) + { + var result = await _aiAppService.AddClassroomSetting(paramDto); + + return result; + } + + /// + /// 更新课堂设置 + /// + /// + /// + [HttpPost(nameof(UpdateClassroomSetting))] + [ServiceFilter(typeof(ValidateDeviceFilter))] + public async Task UpdateClassroomSetting([FromBody] UpdateClassroomSettingRequest paramDto) + { + var result = await _aiAppService.UpdateClassroomSetting(paramDto); + + return result; + } + + /// + /// 获取课堂心率报告 + /// + [HttpGet(nameof(HeartRateReport))] + [ServiceFilter(typeof(ValidateDeviceFilter))] + public async Task HeartRateReport([FromQuery] HeartRateReportRequest paramDto) + { + var result = await _aiAppService.HeartRateReport(paramDto); + return result; + } + + /// + /// 获取学生心率报告 + /// + [HttpGet(nameof(StudentHeartRateReport))] + [ServiceFilter(typeof(ValidateDeviceFilter))] + public async Task StudentHeartRateReport([FromQuery] GetStudentClassReportDetailsDto paramDto) + { + var result = await _aiAppService.StudentHeartRateReport(paramDto); + return result; + } + + /// + /// 获取学生心率报告 + /// + [HttpGet(nameof(JumpRopeReport))] + [ServiceFilter(typeof(ValidateDeviceFilter))] + public async Task> JumpRopeReport([FromQuery] HeartRateReportRequest paramDto) + { + var result = await _aiAppService.JumpRopeReport(paramDto); + return result; + } + + #endregion } } diff --git a/VOL.WebApi/Program.cs b/VOL.WebApi/Program.cs index d7fb195..7baa15c 100644 --- a/VOL.WebApi/Program.cs +++ b/VOL.WebApi/Program.cs @@ -50,7 +50,7 @@ namespace VOL.WebApi serverOptions.Limits.MaxRequestLineSize = 81920; // 8 KB // Set properties and call methods on options }); - webBuilder.UseKestrel().UseUrls("http://*:9991"); + webBuilder.UseKestrel().UseUrls("http://*:9993"); webBuilder.UseIIS(); webBuilder.UseStartup(); }).UseServiceProviderFactory(new AutofacServiceProviderFactory()); diff --git a/VOL.WebApi/Startup.cs b/VOL.WebApi/Startup.cs index 06b4d33..ac947df 100644 --- a/VOL.WebApi/Startup.cs +++ b/VOL.WebApi/Startup.cs @@ -156,11 +156,11 @@ namespace VOL.WebApi services.AddSwaggerGen(c => { //分为2份接口文档 - c.SwaggerDoc("v1", new OpenApiInfo { Title = "VOL.Core后台Api", Version = "v1", Description = "这是对文档的描述。。" }); - c.SwaggerDoc("v2", new OpenApiInfo { Title = "VOL.Core对外三方Api", Version = "v2", Description = "xxx接口文档" }); - c.SwaggerDoc("v3", new OpenApiInfo { Title = "SmartSportsServer-Api", Version = "v3", Description = "SmartSportsServer-Api接口文档" }); - c.SwaggerDoc("v4", new OpenApiInfo { Title = "IOT-Api", Version = "v4", Description = "物联网-Api接口文档" }); - c.SwaggerDoc("v5", new OpenApiInfo { Title = "Ai-Api", Version = "v5", Description = "Ai-Api接口文档" }); + //c.SwaggerDoc("v1", new OpenApiInfo { Title = "VOL.Core后台Api", Version = "v1", Description = "这是对文档的描述。。" }); + //c.SwaggerDoc("v2", new OpenApiInfo { Title = "VOL.Core对外三方Api", Version = "v2", Description = "xxx接口文档" }); + //c.SwaggerDoc("v3", new OpenApiInfo { Title = "SmartSportsServer-Api", Version = "v3", Description = "SmartSportsServer-Api接口文档" }); + //c.SwaggerDoc("v4", new OpenApiInfo { Title = "IOT-Api", Version = "v4", Description = "物联网-Api接口文档" }); + //c.SwaggerDoc("v5", new OpenApiInfo { Title = "Ai-Api", Version = "v5", Description = "Ai-Api接口文档" }); c.SwaggerDoc("v6", new OpenApiInfo { Title = "AiApp-Api", Version = "v6", Description = "AiApp-Api接口文档" }); string xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; @@ -318,18 +318,18 @@ namespace VOL.WebApi //配置HttpContext app.UseStaticHttpContext(); - //app.UseSwagger(); - //app.UseSwaggerUI(c => - //{ - // //2个下拉框选项 选择对应的文档 - // c.SwaggerEndpoint("/swagger/v1/swagger.json", "VOL.Core后台Api"); - // c.SwaggerEndpoint("/swagger/v2/swagger.json", "测试第三方Api"); - // c.SwaggerEndpoint("/swagger/v3/swagger.json", "SmartSportsServer-Api"); - // c.SwaggerEndpoint("/swagger/v4/swagger.json", "物联网-Api"); - // c.SwaggerEndpoint("/swagger/v5/swagger.json", "Ai-Api"); - // c.SwaggerEndpoint("/swagger/v6/swagger.json", "AiApp-Api"); - // c.RoutePrefix = ""; - //}); + app.UseSwagger(); + app.UseSwaggerUI(c => + { + //2个下拉框选项 选择对应的文档 + //c.SwaggerEndpoint("/swagger/v1/swagger.json", "VOL.Core后台Api"); + //c.SwaggerEndpoint("/swagger/v2/swagger.json", "测试第三方Api"); + //c.SwaggerEndpoint("/swagger/v3/swagger.json", "SmartSportsServer-Api"); + //c.SwaggerEndpoint("/swagger/v4/swagger.json", "物联网-Api"); + //c.SwaggerEndpoint("/swagger/v5/swagger.json", "Ai-Api"); + c.SwaggerEndpoint("/swagger/v6/swagger.json", "AiApp-Api"); + c.RoutePrefix = ""; + }); app.UseRouting(); app.UseCors();