弟弟
This commit is contained in:
parent
a248cff18a
commit
8daf528de7
@ -39,12 +39,12 @@ namespace VOL.Ai.Services
|
|||||||
private readonly IAiAppVersionRepository _aiAppVersionRepository;
|
private readonly IAiAppVersionRepository _aiAppVersionRepository;
|
||||||
private readonly IN_SportsTrainingCategoryRepository _sportsTrainingCategoryRepository;
|
private readonly IN_SportsTrainingCategoryRepository _sportsTrainingCategoryRepository;
|
||||||
private readonly IClassRoomRecordRepository _classRoomRecordRepository;
|
private readonly IClassRoomRecordRepository _classRoomRecordRepository;
|
||||||
private readonly IHeartRateDataRepository _heartRateDataRepository;
|
|
||||||
private readonly IActivitiestDataRepository _activitiestDataRepository;
|
private readonly IActivitiestDataRepository _activitiestDataRepository;
|
||||||
private readonly ILevelExamDataRepository _levelExamDataRepository;
|
private readonly ILevelExamDataRepository _levelExamDataRepository;
|
||||||
private readonly ISportsTestDataRepository _sportsTestDataRepository;
|
private readonly ISportsTestDataRepository _sportsTestDataRepository;
|
||||||
private readonly ITrainingDataRepository _trainingDataRepository;
|
private readonly ITrainingDataRepository _trainingDataRepository;
|
||||||
private readonly IFastJumpRopeDataRepository _fastJumpRopeDataRepository;
|
private readonly IFastJumpRopeDataRepository _fastJumpRopeDataRepository;
|
||||||
|
private readonly IHeartRateDataRepository _heartRateDataRepository;
|
||||||
private readonly ISys_UserRepository _userRepository;
|
private readonly ISys_UserRepository _userRepository;
|
||||||
private readonly IClassroomStageRepository _classroomStageRepository;
|
private readonly IClassroomStageRepository _classroomStageRepository;
|
||||||
private readonly IClassroomSettingRepository _classroomSettingRepository;
|
private readonly IClassroomSettingRepository _classroomSettingRepository;
|
||||||
@ -60,12 +60,12 @@ namespace VOL.Ai.Services
|
|||||||
IScanCodeLoginRepository scanCodeLoginRepository,
|
IScanCodeLoginRepository scanCodeLoginRepository,
|
||||||
IN_SportsTrainingCategoryRepository sportsTrainingCategoryRepository,
|
IN_SportsTrainingCategoryRepository sportsTrainingCategoryRepository,
|
||||||
IClassRoomRecordRepository classRoomRecordRepository,
|
IClassRoomRecordRepository classRoomRecordRepository,
|
||||||
IHeartRateDataRepository heartRateDataRepository,
|
|
||||||
IActivitiestDataRepository activitiestDataRepository,
|
IActivitiestDataRepository activitiestDataRepository,
|
||||||
ILevelExamDataRepository levelExamDataRepository,
|
ILevelExamDataRepository levelExamDataRepository,
|
||||||
ISportsTestDataRepository sportsTestDataRepository,
|
ISportsTestDataRepository sportsTestDataRepository,
|
||||||
ITrainingDataRepository trainingDataRepository,
|
ITrainingDataRepository trainingDataRepository,
|
||||||
IFastJumpRopeDataRepository fastJumpRopeDataRepository,
|
IFastJumpRopeDataRepository fastJumpRopeDataRepository,
|
||||||
|
IHeartRateDataRepository heartRateDataRepository,
|
||||||
ISys_UserRepository userRepository,
|
ISys_UserRepository userRepository,
|
||||||
IClassroomStageRepository classroomStageRepository,
|
IClassroomStageRepository classroomStageRepository,
|
||||||
IClassroomSettingRepository classroomSettingRepository,
|
IClassroomSettingRepository classroomSettingRepository,
|
||||||
@ -80,13 +80,13 @@ namespace VOL.Ai.Services
|
|||||||
_teacherRepository = teacherRepository;
|
_teacherRepository = teacherRepository;
|
||||||
_sportsTrainingCategoryRepository = sportsTrainingCategoryRepository;
|
_sportsTrainingCategoryRepository = sportsTrainingCategoryRepository;
|
||||||
_classRoomRecordRepository = classRoomRecordRepository;
|
_classRoomRecordRepository = classRoomRecordRepository;
|
||||||
_heartRateDataRepository = heartRateDataRepository;
|
|
||||||
_activitiestDataRepository = activitiestDataRepository;
|
_activitiestDataRepository = activitiestDataRepository;
|
||||||
_levelExamDataRepository = levelExamDataRepository;
|
_levelExamDataRepository = levelExamDataRepository;
|
||||||
_sportsTestDataRepository = sportsTestDataRepository;
|
_sportsTestDataRepository = sportsTestDataRepository;
|
||||||
_trainingDataRepository = trainingDataRepository;
|
_trainingDataRepository = trainingDataRepository;
|
||||||
_classRepository = classRepository;
|
_classRepository = classRepository;
|
||||||
_fastJumpRopeDataRepository = fastJumpRopeDataRepository;
|
_fastJumpRopeDataRepository = fastJumpRopeDataRepository;
|
||||||
|
_heartRateDataRepository = heartRateDataRepository;
|
||||||
_userRepository = userRepository;
|
_userRepository = userRepository;
|
||||||
_classroomStageRepository = classroomStageRepository;
|
_classroomStageRepository = classroomStageRepository;
|
||||||
_classroomSettingRepository = classroomSettingRepository;
|
_classroomSettingRepository = classroomSettingRepository;
|
||||||
@ -906,41 +906,41 @@ namespace VOL.Ai.Services
|
|||||||
}
|
}
|
||||||
|
|
||||||
var heartRateDatas = _mapper.Map<List<Ai_HeartRateData>>(paramDto.Datas);
|
var heartRateDatas = _mapper.Map<List<Ai_HeartRateData>>(paramDto.Datas);
|
||||||
heartRateDatas = heartRateDatas.Where(data => data.Value != 0).ToList();
|
|
||||||
|
|
||||||
var classIds = paramDto.Datas.Select(x => x.ClassId).ToList();
|
//var classIds = paramDto.Datas.Select(x => x.ClassId).Distinct().ToList();
|
||||||
var classList = await _classRepository.FindAsIQueryable(x => x.SchoolCode == paramDto.SchoolCode && classIds.Contains(x.Id)).ToListAsync();
|
//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 timeNow = DateTime.Now;
|
||||||
|
|
||||||
var classDict = classList.ToDictionary(x => x.Id, x => x);
|
|
||||||
|
|
||||||
heartRateDatas.ForEach(heartRateData =>
|
heartRateDatas.ForEach(heartRateData =>
|
||||||
{
|
{
|
||||||
if (classDict.TryGetValue(heartRateData.ClassId, out var classInfo))
|
//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.Code = paramDto.Code;
|
||||||
heartRateData.SchoolCode = paramDto.SchoolCode;
|
heartRateData.SchoolCode = paramDto.SchoolCode;
|
||||||
heartRateData.ClassRoomRecordId = paramDto.ClassRoomRecordId;
|
heartRateData.ClassRoomRecordId = paramDto.ClassRoomRecordId;
|
||||||
heartRateData.ClassroomStageId = paramDto.ClassroomStageId;
|
heartRateData.ClassroomStageId = paramDto.ClassroomStageId;
|
||||||
heartRateData.TeacherId = paramDto.TeacherId;
|
heartRateData.TeacherId = paramDto.TeacherId;
|
||||||
heartRateData.GradeId = classInfo.GradeId;
|
|
||||||
heartRateData.GradeName = classInfo.GradeName;
|
|
||||||
heartRateData.ScoreTime = timeNow;
|
heartRateData.ScoreTime = timeNow;
|
||||||
heartRateData.IsDisplay = true;
|
heartRateData.IsDisplay = true;
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _heartRateDataRepository.AddRangeAsync(heartRateDatas);
|
await _heartRateDataRepository.AddRangeAsync(heartRateDatas);
|
||||||
await _heartRateDataRepository.SaveChangesAsync();
|
await _heartRateDataRepository.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 速度跳绳成绩上传
|
/// 速度跳绳成绩上传
|
||||||
@ -958,10 +958,10 @@ namespace VOL.Ai.Services
|
|||||||
|
|
||||||
var fastJumpRopeDatas = _mapper.Map<List<Ai_FastJumpRopeData>>(paramDto.Datas);
|
var fastJumpRopeDatas = _mapper.Map<List<Ai_FastJumpRopeData>>(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 classList = await _classRepository.FindAsync(x => x.SchoolCode == paramDto.SchoolCode && classIds.Contains(x.Id));
|
||||||
|
|
||||||
var classDict = classList.ToDictionary(x => x.Id, x => x);
|
var classDict = classList.ToDictionary(x => x.Id, x => x);
|
||||||
|
|
||||||
fastJumpRopeDatas.ForEach(data =>
|
fastJumpRopeDatas.ForEach(data =>
|
||||||
{
|
{
|
||||||
if (classDict.TryGetValue(data.ClassId, out var classInfo))
|
if (classDict.TryGetValue(data.ClassId, out var classInfo))
|
||||||
|
@ -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
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 通过内部队列写入心率数据
|
|
||||||
/// </summary>
|
|
||||||
public static class HeartRateQueueData
|
|
||||||
{
|
|
||||||
public static ConcurrentQueue<Ai_HeartRateData> heartRateQueueData = new ConcurrentQueue<Ai_HeartRateData>();
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -318,18 +318,18 @@ namespace VOL.WebApi
|
|||||||
//配置HttpContext
|
//配置HttpContext
|
||||||
app.UseStaticHttpContext();
|
app.UseStaticHttpContext();
|
||||||
|
|
||||||
app.UseSwagger();
|
//app.UseSwagger();
|
||||||
app.UseSwaggerUI(c =>
|
//app.UseSwaggerUI(c =>
|
||||||
{
|
//{
|
||||||
//2个下拉框选项 选择对应的文档
|
// //2个下拉框选项 选择对应的文档
|
||||||
//c.SwaggerEndpoint("/swagger/v1/swagger.json", "VOL.Core后台Api");
|
// //c.SwaggerEndpoint("/swagger/v1/swagger.json", "VOL.Core后台Api");
|
||||||
//c.SwaggerEndpoint("/swagger/v2/swagger.json", "测试第三方Api");
|
// //c.SwaggerEndpoint("/swagger/v2/swagger.json", "测试第三方Api");
|
||||||
//c.SwaggerEndpoint("/swagger/v3/swagger.json", "SmartSportsServer-Api");
|
// //c.SwaggerEndpoint("/swagger/v3/swagger.json", "SmartSportsServer-Api");
|
||||||
//c.SwaggerEndpoint("/swagger/v4/swagger.json", "物联网-Api");
|
// //c.SwaggerEndpoint("/swagger/v4/swagger.json", "物联网-Api");
|
||||||
//c.SwaggerEndpoint("/swagger/v5/swagger.json", "Ai-Api");
|
// //c.SwaggerEndpoint("/swagger/v5/swagger.json", "Ai-Api");
|
||||||
c.SwaggerEndpoint("/swagger/v6/swagger.json", "AiApp-Api");
|
// c.SwaggerEndpoint("/swagger/v6/swagger.json", "AiApp-Api");
|
||||||
c.RoutePrefix = "";
|
// c.RoutePrefix = "";
|
||||||
});
|
//});
|
||||||
|
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
app.UseCors();
|
app.UseCors();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user