diff --git a/VOL.Ai/Services/AiAppService.cs b/VOL.Ai/Services/AiAppService.cs index 74fe68e..ea82a0b 100644 --- a/VOL.Ai/Services/AiAppService.cs +++ b/VOL.Ai/Services/AiAppService.cs @@ -39,12 +39,12 @@ namespace VOL.Ai.Services private readonly IAiAppVersionRepository _aiAppVersionRepository; private readonly IN_SportsTrainingCategoryRepository _sportsTrainingCategoryRepository; private readonly IClassRoomRecordRepository _classRoomRecordRepository; - private readonly IHeartRateDataRepository _heartRateDataRepository; private readonly IActivitiestDataRepository _activitiestDataRepository; private readonly ILevelExamDataRepository _levelExamDataRepository; private readonly ISportsTestDataRepository _sportsTestDataRepository; private readonly ITrainingDataRepository _trainingDataRepository; private readonly IFastJumpRopeDataRepository _fastJumpRopeDataRepository; + private readonly IHeartRateDataRepository _heartRateDataRepository; private readonly ISys_UserRepository _userRepository; private readonly IClassroomStageRepository _classroomStageRepository; private readonly IClassroomSettingRepository _classroomSettingRepository; @@ -60,12 +60,12 @@ namespace VOL.Ai.Services IScanCodeLoginRepository scanCodeLoginRepository, IN_SportsTrainingCategoryRepository sportsTrainingCategoryRepository, IClassRoomRecordRepository classRoomRecordRepository, - IHeartRateDataRepository heartRateDataRepository, IActivitiestDataRepository activitiestDataRepository, ILevelExamDataRepository levelExamDataRepository, ISportsTestDataRepository sportsTestDataRepository, ITrainingDataRepository trainingDataRepository, IFastJumpRopeDataRepository fastJumpRopeDataRepository, + IHeartRateDataRepository heartRateDataRepository, ISys_UserRepository userRepository, IClassroomStageRepository classroomStageRepository, IClassroomSettingRepository classroomSettingRepository, @@ -80,13 +80,13 @@ namespace VOL.Ai.Services _teacherRepository = teacherRepository; _sportsTrainingCategoryRepository = sportsTrainingCategoryRepository; _classRoomRecordRepository = classRoomRecordRepository; - _heartRateDataRepository = heartRateDataRepository; _activitiestDataRepository = activitiestDataRepository; _levelExamDataRepository = levelExamDataRepository; _sportsTestDataRepository = sportsTestDataRepository; _trainingDataRepository = trainingDataRepository; _classRepository = classRepository; _fastJumpRopeDataRepository = fastJumpRopeDataRepository; + _heartRateDataRepository = heartRateDataRepository; _userRepository = userRepository; _classroomStageRepository = classroomStageRepository; _classroomSettingRepository = classroomSettingRepository; @@ -906,40 +906,40 @@ namespace VOL.Ai.Services } var heartRateDatas = _mapper.Map>(paramDto.Datas); - heartRateDatas = heartRateDatas.Where(data => data.Value != 0).ToList(); - var classIds = paramDto.Datas.Select(x => x.ClassId).ToList(); - var classList = await _classRepository.FindAsIQueryable(x => x.SchoolCode == paramDto.SchoolCode && classIds.Contains(x.Id)).ToListAsync(); + //var classIds = paramDto.Datas.Select(x => x.ClassId).Distinct().ToList(); + //var classList = await _classRepository.FindAsync(x => x.SchoolCode == paramDto.SchoolCode && classIds.Contains(x.Id)); + //var classDict = classList.ToDictionary(x => x.Id, x => x); var timeNow = DateTime.Now; - var classDict = classList.ToDictionary(x => x.Id, x => x); - heartRateDatas.ForEach(heartRateData => { - if (classDict.TryGetValue(heartRateData.ClassId, out var classInfo)) - { - heartRateData.Code = paramDto.Code; - heartRateData.SchoolCode = paramDto.SchoolCode; - heartRateData.ClassRoomRecordId = paramDto.ClassRoomRecordId; - heartRateData.ClassroomStageId = paramDto.ClassroomStageId; - heartRateData.TeacherId = paramDto.TeacherId; - heartRateData.GradeId = classInfo.GradeId; - heartRateData.GradeName = classInfo.GradeName; - heartRateData.ScoreTime = timeNow; - heartRateData.IsDisplay = true; - } + //if (classDict.TryGetValue(heartRateData.ClassId, out var classInfo)) + //{ + // heartRateData.Code = paramDto.Code; + // heartRateData.SchoolCode = paramDto.SchoolCode; + // heartRateData.ClassRoomRecordId = paramDto.ClassRoomRecordId; + // heartRateData.ClassroomStageId = paramDto.ClassroomStageId; + // heartRateData.TeacherId = paramDto.TeacherId; + // heartRateData.GradeId = classInfo.GradeId; + // heartRateData.GradeName = classInfo.GradeName; + // heartRateData.ClassName = classInfo.ClassName; + // heartRateData.ScoreTime = timeNow; + // heartRateData.IsDisplay = true; + //} + + heartRateData.Code = paramDto.Code; + heartRateData.SchoolCode = paramDto.SchoolCode; + heartRateData.ClassRoomRecordId = paramDto.ClassRoomRecordId; + heartRateData.ClassroomStageId = paramDto.ClassroomStageId; + heartRateData.TeacherId = paramDto.TeacherId; + heartRateData.ScoreTime = timeNow; + heartRateData.IsDisplay = true; }); - try - { - await _heartRateDataRepository.AddRangeAsync(heartRateDatas); - await _heartRateDataRepository.SaveChangesAsync(); - } - catch (Exception e) - { - throw; - } + await _heartRateDataRepository.AddRangeAsync(heartRateDatas); + await _heartRateDataRepository.SaveChangesAsync(); } /// @@ -958,10 +958,10 @@ namespace VOL.Ai.Services var fastJumpRopeDatas = _mapper.Map>(paramDto.Datas); - var classIds = paramDto.Datas.Select(x => x.ClassId).ToList(); + var classIds = paramDto.Datas.Select(x => x.ClassId).Distinct().ToList(); var classList = await _classRepository.FindAsync(x => x.SchoolCode == paramDto.SchoolCode && classIds.Contains(x.Id)); - var classDict = classList.ToDictionary(x => x.Id, x => x); + fastJumpRopeDatas.ForEach(data => { if (classDict.TryGetValue(data.ClassId, out var classInfo)) diff --git a/VOL.Core/Services/HeartRateQueueData.cs b/VOL.Core/Services/HeartRateQueueData.cs deleted file mode 100644 index 7343e7b..0000000 --- a/VOL.Core/Services/HeartRateQueueData.cs +++ /dev/null @@ -1,143 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Data; -using System.Data.SqlClient; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using VOL.Core.Configuration; -using VOL.Core.Const; -using VOL.Core.DBManager; -using VOL.Core.Enums; -using VOL.Core.Extensions; -using VOL.Core.WorkFlow; -using VOL.Entity.DomainModels; - -namespace VOL.Core.Services -{ - /// - /// 通过内部队列写入心率数据 - /// - public static class HeartRateQueueData - { - public static ConcurrentQueue heartRateQueueData = new ConcurrentQueue(); - static HeartRateQueueData() - { - Task.Run(() => - { - Start(); - if (DBType.Name != "MsSql") - { - return; - } - try - { - DBServerProvider.SqlDapper.ExcuteNonQuery("set global local_infile = 'ON';", null); - } - catch (Exception ex) - { - Console.WriteLine($"日志启动调用mysql数据库异常:{ex.Message},{ex.StackTrace}"); - } - }); - } - - public static void Add(Ai_HeartRateData heartRateData) - { - heartRateQueueData.Enqueue(heartRateData); - } - - private static void Start() - { - DataTable queueTable = CreateEmptyTable(); - while (true) - { - try - { - if (heartRateQueueData.Count() > 0) - { - DequeueToTable(queueTable); continue; - } - - //每5秒写一次数据 - Thread.Sleep(1000); - if (queueTable.Rows.Count == 0) { continue; } - - DBServerProvider.SqlDapper.BulkInsert(queueTable, "Ai_HeartRateData", SqlBulkCopyOptions.Default); - - queueTable.Clear(); - } - catch (Exception ex) - { - Console.WriteLine($"心率数据同步失败:{ex.Message}"); - Logger.Error($"心率数据同步失败:{ex.Message}"); - Logger.Info(Enums.LoggerType.Add, $"Data:{queueTable.Serialize()}"); - queueTable.Clear(); - } - } - } - private static void DequeueToTable(DataTable queueTable) - { - // 从队列中取出日志 - heartRateQueueData.TryDequeue(out Ai_HeartRateData heartRateData); - - DataRow row = queueTable.NewRow(); - - // 填充 DataRow 的各个列 - row["schoolcode"] = heartRateData.SchoolCode; - row["code"] = heartRateData.Code; - row["classroomrecordid"] = heartRateData.ClassRoomRecordId; - row["gradeid"] = heartRateData.GradeId; - row["classid"] = heartRateData.ClassId; - row["gradename"] = heartRateData.GradeName; - row["classname"] = heartRateData.ClassName; - //row["studentcount"] = heartRateData.StudentCount; - row["teacherid"] = heartRateData.TeacherId; - row["studentno"] = heartRateData.StudentNo; - row["studentname"] = heartRateData.StudentName; - row["sex"] = (int)heartRateData.Sex; - //row["starttime"] = heartRateData.StartTime; - //row["endtime"] = heartRateData.EndTime; - row["scoretime"] = heartRateData.ScoreTime; - row["motionduration"] = heartRateData.MotionDuration; - row["consumption"] = heartRateData.Consumption; - row["strength"] = heartRateData.Strength; - row["value"] = heartRateData.Value; - row["remarks"] = heartRateData.Remarks; - - // 添加到 DataTable - queueTable.Rows.Add(row); - } - - private static DataTable CreateEmptyTable() - { - DataTable queueTable = new DataTable(); - - // 定义与数据库中小写字段匹配的列 - queueTable.Columns.Add("schoolcode", typeof(string)); // 学校Code - queueTable.Columns.Add("code", typeof(string)); // AI设备的唯一编码 - queueTable.Columns.Add("classroomrecordid", typeof(int)); // 课堂记录Id - queueTable.Columns.Add("gradeid", typeof(int)); // 年级编号 - queueTable.Columns.Add("classid", typeof(int)); // 班级Id - queueTable.Columns.Add("gradename", typeof(string)); // 年级名称 - queueTable.Columns.Add("classname", typeof(string)); // 班级名称 - //queueTable.Columns.Add("studentcount", typeof(int)); // 班级人数 - queueTable.Columns.Add("teacherid", typeof(int)); // 老师Id - queueTable.Columns.Add("studentno", typeof(string)); // 学号 - queueTable.Columns.Add("studentname", typeof(string)); // 姓名 - queueTable.Columns.Add("sex", typeof(int)); // 性别(SexType,假设是int类型) - //queueTable.Columns.Add("starttime", typeof(DateTime)); // 开始时间 - //queueTable.Columns.Add("endtime", typeof(DateTime)); // 结束时间 - queueTable.Columns.Add("scoretime", typeof(DateTime)); // 测试时间 - queueTable.Columns.Add("motionduration", typeof(int)); // 运动时长/分钟 - queueTable.Columns.Add("consumption", typeof(int)); // 运动消耗 - queueTable.Columns.Add("strength", typeof(double)); // 运动强度 - queueTable.Columns.Add("value", typeof(double)); // 心率 - queueTable.Columns.Add("remarks", typeof(string)); // 备注 - - return queueTable; - } - - } -} diff --git a/VOL.WebApi/Startup.cs b/VOL.WebApi/Startup.cs index ac947df..a3d8a79 100644 --- a/VOL.WebApi/Startup.cs +++ b/VOL.WebApi/Startup.cs @@ -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();