弟弟
This commit is contained in:
parent
a248cff18a
commit
8daf528de7
@ -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,41 +906,41 @@ namespace VOL.Ai.Services
|
||||
}
|
||||
|
||||
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 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))
|
||||
{
|
||||
//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.GradeId = classInfo.GradeId;
|
||||
heartRateData.GradeName = classInfo.GradeName;
|
||||
heartRateData.ScoreTime = timeNow;
|
||||
heartRateData.IsDisplay = true;
|
||||
}
|
||||
});
|
||||
|
||||
try
|
||||
{
|
||||
await _heartRateDataRepository.AddRangeAsync(heartRateDatas);
|
||||
await _heartRateDataRepository.SaveChangesAsync();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 速度跳绳成绩上传
|
||||
@ -958,10 +958,10 @@ namespace VOL.Ai.Services
|
||||
|
||||
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 classDict = classList.ToDictionary(x => x.Id, x => x);
|
||||
|
||||
fastJumpRopeDatas.ForEach(data =>
|
||||
{
|
||||
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
|
||||
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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user