心率上传

This commit is contained in:
tanglong 2025-12-08 09:11:05 +08:00
parent 24ee15b7b5
commit 011f3fa3a4
27 changed files with 185 additions and 436 deletions

View File

@ -6,6 +6,7 @@ using YD_AllHeartRates.Api.Services.Interface;
using YD_AllHeartRates.Commons.Dto;
using YD_AllHeartRates.Commons.Dto.DataPush;
using YD_AllHeartRates.Commons.Dto.Device;
using YD_AllHeartRates.Commons.MemoryCaches;
namespace YD_AllHeartRates.Api.Controllers
{
@ -19,9 +20,12 @@ namespace YD_AllHeartRates.Api.Controllers
{
private readonly IDataPushService _dataPushService;
public DataPushController(IDataPushService dataPushService)
private readonly ICaching _caching;
public DataPushController(IDataPushService dataPushService, ICaching caching)
{
_dataPushService = dataPushService;
_caching = caching;
}
/// <summary>
@ -53,29 +57,67 @@ namespace YD_AllHeartRates.Api.Controllers
[HttpPost(nameof(SportsRoutineReport))]
public async Task<SportsRoutineReportResponse> SportsRoutineReport()
{
var data = new List<StudentData>
var now = DateTime.Now;
SportsRoutineReportResponse res = new SportsRoutineReportResponse();
var _eduIds = _caching.Get<List<string>>("StudentEduIds");
if (_eduIds != null || _eduIds.Count > 0)
{
new StudentData
var random = new Random();
var data = new List<StudentData>();
// 假设需要过去 24 小时的心率(可改)
var beginTime = now.AddHours(-24);
for (int i = 0; i < _eduIds.Count; i++)
{
SBID = "1234567",
XSEDUID = "d1cd4ff5-6511-58b8-809f-22d102b3c20d",
HDSJ = new List<HeartRateRecordDto>
var hdsjList = new List<HeartRateRecordDto>();
// 从 24 小时前 → 当前时刻,每 2 分钟一条
var minutes = (int)(now - beginTime).TotalMinutes;
for (int m = 0; m < minutes; m += 2)
{
new HeartRateRecordDto { SJSJ = "2025-11-11 14:50:00", XL = 90, JXXL = 80 },
new HeartRateRecordDto { SJSJ = "2025-11-11 14:51:00", XL = 92, JXXL = 80 }
var recordTime = beginTime.AddMinutes(m);
bool isSportTime = recordTime >= now.AddHours(-2);
// ☆☆ 最近两小时是运动心率 ☆☆
hdsjList.Add(new HeartRateRecordDto
{
SJSJ = recordTime.ToString("yyyy-MM-dd HH:mm:ss"),
// 心率逻辑区分
XL = isSportTime
? random.Next(120, 166) // 运动心率偏高
: random.Next(70, 111), // 正常心率 70~110可调
JXXL = random.Next(60, 91) // 静息心率保持不变
});
}
},
new StudentData
{
SBID = "5678934",
XSEDUID = "d1cd4ff5-6511-58b8-809f-22d102b3c20e",
HDSJ = new List<HeartRateRecordDto>
var student = new StudentData
{
new HeartRateRecordDto { SJSJ = "2025-11-11 14:50:00", XL = 88, JXXL = 78 }
}
SBID = (i + 1).ToString("D2"),
XSEDUID = _eduIds[i],
HDSJ = hdsjList
};
data.Add(student);
}
};
var res = await _dataPushService.SportsRoutineReport(data);
try
{
res = await _dataPushService.SportsRoutineReport(data);
Console.WriteLine($"[{DateTime.Now}] HeartRate job code:{res?.code} msg:{res?.msg}");
}
catch (Exception ex)
{
Console.WriteLine($"[{DateTime.Now}] HeartRate job msg:{ex.Message}");
}
}
return res;
}
@ -86,6 +128,7 @@ namespace YD_AllHeartRates.Api.Controllers
[HttpPost(nameof(SportsAbnormalReport))]
public async Task<SportsRoutineReportResponse> SportsAbnormalReport()
{
var now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var data = new List<SportsAbnormalReportDto>
{
new SportsAbnormalReportDto
@ -94,7 +137,7 @@ namespace YD_AllHeartRates.Api.Controllers
XSEDUID = "d1cd4ff5-6511-58b8-809f-22d102b3c20d",
HDSJ = new List<AbnormalHeartRateRecordDto>
{
new AbnormalHeartRateRecordDto { SJSJ = "2025-11-11 15:50:00", XL = 90, JXXL = 80, YCXX="心率过高", YCYY="持续剧烈运动" }
new AbnormalHeartRateRecordDto { SJSJ = now, XL = 90, JXXL = 80, YCXX="心率过高", YCYY="持续剧烈运动" }
}
},
new SportsAbnormalReportDto
@ -103,7 +146,7 @@ namespace YD_AllHeartRates.Api.Controllers
XSEDUID = "d1cd4ff5-6511-58b8-809f-22d102b3c20e",
HDSJ = new List<AbnormalHeartRateRecordDto>
{
new AbnormalHeartRateRecordDto { SJSJ = "2025-11-11 15:50:00", XL = 88, JXXL = 78, YCXX="心率过高", YCYY="持续剧烈运动" }
new AbnormalHeartRateRecordDto { SJSJ = now, XL = 88, JXXL = 78, YCXX="心率过高", YCYY="持续剧烈运动" }
}
}
};

View File

@ -0,0 +1,6 @@
C:\Users\tangl\Desktop\Git\YD_AllHeartRates.Api\YD_AllHeartRates.Api\Fakes\YD_AllHeartRates.Commons.fakes : warning : 无法为 YD_AllHeartRates.Commons.Dto.ResponseMsg 生成存根: 类型没有对程序集可见的构造函数。构造函数本身或参数可能不可见。。
C:\Users\tangl\Desktop\Git\YD_AllHeartRates.Api\YD_AllHeartRates.Api\Fakes\YD_AllHeartRates.Commons.fakes : warning : 无法为 YD_AllHeartRates.Commons.MemoryCaches.MemoryCacheSetup 生成存根: 类型没有对程序集可见的构造函数。构造函数本身或参数可能不可见。。
C:\Users\tangl\Desktop\Git\YD_AllHeartRates.Api\YD_AllHeartRates.Api\Fakes\YD_AllHeartRates.Commons.fakes : warning : 无法为 YD_AllHeartRates.Commons.Middlewares.SystemExceptionApplicationBuilderExtensions 生成存根: 类型没有对程序集可见的构造函数。构造函数本身或参数可能不可见。。
C:\Users\tangl\Desktop\Git\YD_AllHeartRates.Api\YD_AllHeartRates.Api\Fakes\YD_AllHeartRates.Commons.fakes : warning : 无法为 YD_AllHeartRates.Commons.Utils.Util 生成存根: 类型没有对程序集可见的构造函数。构造函数本身或参数可能不可见。。
C:\Users\tangl\Desktop\Git\YD_AllHeartRates.Api\YD_AllHeartRates.Api\Fakes\YD_AllHeartRates.Commons.fakes : warning : 正在跳过 method System.Int32 YD_AllHeartRates.Commons.Utils.Util.GetRank(!!0 score)method System.Int32 YD_AllHeartRates.Commons.Utils.Util.GetRank(!!0 score) unstubbable: 无法同时指定类约束和 "class" 或 "struct" 约束
C:\Users\tangl\Desktop\Git\YD_AllHeartRates.Api\YD_AllHeartRates.Api\Fakes\YD_AllHeartRates.Commons.fakes : warning : 正在跳过 method System.String YD_AllHeartRates.Commons.Utils.Util.GetRankStr(!!0 score)method System.String YD_AllHeartRates.Commons.Utils.Util.GetRankStr(!!0 score) unstubbable: 无法同时指定类约束和 "class" 或 "struct" 约束

View File

@ -1,6 +1,9 @@
using System;
using Newtonsoft.Json;
using System;
using YD_AllHeartRates.Api.Services.Interface;
using YD_AllHeartRates.Commons.Dto.DataPush;
using YD_AllHeartRates.Commons.MemoryCaches;
using YD_AllHeartRates.Commons.Utils;
namespace YD_AllHeartRates.Api.Middlewares
{
@ -9,6 +12,8 @@ namespace YD_AllHeartRates.Api.Middlewares
private readonly IDataPushService _dataPushService;
private Timer _timer;
private readonly ICaching _caching;
private static string[] ChangXing = new string[]
{
"曹贺淳",
@ -91,33 +96,53 @@ namespace YD_AllHeartRates.Api.Middlewares
private static List<string> _eduIds = new List<string>();
public SportsRoutineReportJob(IDataPushService dataPushService)
public SportsRoutineReportJob(IDataPushService dataPushService, ICaching caching)
{
_dataPushService = dataPushService;
_caching = caching;
// 尝试从 Redis 获取缓存
var cachedEduIds = _caching.Get<List<string>>("StudentEduIds");
if (cachedEduIds != null && cachedEduIds.Count > 0)
{
_eduIds = cachedEduIds;
Console.WriteLine("从 Redis 加载学生 EduId 完成。");
return; // 已有缓存直接返回
}
// 正大中学
foreach (var name in ZhengDa)
{
var student = _dataPushService.GetStudentEduId("上海市崇明区正大中学", "七年级", "5班", name, "").Result.FirstOrDefault();
var student = _dataPushService
.GetStudentEduId("上海市崇明区正大中学", "七年级", "5班", name, "")
.Result
.FirstOrDefault();
if (student != null)
{
_eduIds.Add(student.EduId);
Console.WriteLine($"上海市崇明区正大中学:[{DateTime.Now}] {name}: {student.EduId}");
Console.WriteLine($"正大中学:[{DateTime.Now}] {name}: {student.EduId}");
}
}
// 长兴小学
foreach (var name in ChangXing)
{
var student = _dataPushService.GetStudentEduId("上海市崇明区长兴小学", "二年级", "二年级2班", name, "").Result.FirstOrDefault();
var student = _dataPushService
.GetStudentEduId("上海市崇明区长兴小学", "二年级", "二年级2班", name, "")
.Result
.FirstOrDefault();
if (student != null)
{
_eduIds.Add(student.EduId);
Console.WriteLine($"上海市崇明区长兴小学:[{DateTime.Now}] {name}: {student.EduId}");
Console.WriteLine($"长兴小学:[{DateTime.Now}] {name}: {student.EduId}");
}
}
var json = JsonConvert.SerializeObject(_eduIds);
_caching.AddObject("StudentEduIds", json);
Console.WriteLine("学生 EduId 已缓存到 Redis。");
}
public Task StartAsync(CancellationToken cancellationToken)
@ -137,33 +162,23 @@ namespace YD_AllHeartRates.Api.Middlewares
var random = new Random();
var data = new List<StudentData>();
// 假设需要过去 24 小时的心率(可改)
var beginTime = now.AddHours(-24);
for (int i = 0; i < _eduIds.Count; i++)
{
var hdsjList = new List<HeartRateRecordDto>();
// 从 24 小时前 → 当前时刻,每 2 分钟一条
var minutes = (int)(now - beginTime).TotalMinutes;
// 每个学生生成 60 条心率数据,间隔可平均分在过去 24 小时
var beginTime = now.AddHours(-24);
var intervalMinutes = 24 * 60 / 60; // 24 小时 / 60 条 = 每条间隔分钟数
for (int m = 0; m < minutes; m += 2)
for (int j = 0; j < 60; j++)
{
var recordTime = beginTime.AddMinutes(m);
bool isSportTime = recordTime >= now.AddHours(-2);
// ☆☆ 最近两小时是运动心率 ☆☆
var recordTime = beginTime.AddMinutes(j * intervalMinutes);
hdsjList.Add(new HeartRateRecordDto
{
SJSJ = recordTime.ToString("yyyy-MM-dd HH:mm:ss"),
// 心率逻辑区分
XL = isSportTime
? random.Next(120, 166) // 运动心率偏高
: random.Next(70, 111), // 正常心率 70~110可调
JXXL = random.Next(60, 91) // 静息心率保持不变
XL = random.Next(70, 111), // 正常心率 70~110
JXXL = random.Next(60, 91) // 静息心率
});
}
@ -179,16 +194,17 @@ namespace YD_AllHeartRates.Api.Middlewares
try
{
await _dataPushService.SportsRoutineReport(data);
Console.WriteLine($"[{DateTime.Now}] HeartRate job OK.");
var res = await _dataPushService.SportsRoutineReport(data);
Console.WriteLine($"[{DateTime.Now}] HeartRate job code:{res?.code} msg:{res?.msg}");
}
catch (Exception ex)
{
Console.WriteLine($"[{DateTime.Now}] Job ERROR: {ex}");
Console.WriteLine($"[{DateTime.Now}] HeartRate job msg:{ex.Message}");
}
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
_timer?.Change(Timeout.Infinite, 0);

View File

@ -186,6 +186,61 @@ namespace YD_AllHeartRates.Api.Mqtt
RedisHelper.SAdd($"school:{student.SchoolCode}:students", student.StudentNo);
}
else if (ble.bs_name.Contains("YD"))
{
if (!studentHMap.TryGetValue(ble.bs_name, out var student)) continue;
// 寻找有效载荷开头 ffff0170
int ydIndex = IndexOfSequence(data, new byte[] { 0xFF, 0xFF, 0x01, 0x70 });
if (ydIndex < 0 || data.Length < ydIndex + 17) continue;
int battery = data[ydIndex + 2];
int heartRate = data[ydIndex + 3];
int calorie = data[ydIndex + 4];
int hrv = data[ydIndex + 5];
int statusFlag = data[ydIndex + 6];
// 步数 2 个字节,小端
int step = data[ydIndex + 7] | (data[ydIndex + 8] << 8);
int intensity = data[ydIndex + 9];
// 设备编号 7 个字节 ASCII
string deviceNo = Encoding.ASCII.GetString(data, ydIndex + 10, 7).Trim('\0');
if (heartRate == 0) continue;
var entity = new HeartRateData
{
ScoreTime = scoreTime,
Code = ble.bs_name,
GradeId = student.GradeId,
GradeName = student.GradeName,
ClassId = student.ClassId,
ClassName = student.ClassName ?? "",
SchoolCode = student.SchoolCode ?? "",
Sex = student.Sex,
Value = heartRate,
QuantityOfElectricity = battery,
StudentNo = student.StudentNo,
StudentName = student.StudentName,
// 强度算法 —— 与 GTY 类似,用年龄计算
Strength = (int)Math.Round(((double)heartRate / (220 - student.Age)) * 100),
// 可扩展字段(如果 HeartRateData 未包含可删除)
//Calorie = calorie,
//HRV = hrv,
//Step = step,
//StatusFlag = statusFlag,
//DeviceNo = deviceNo
};
heartRateEntities.Add(entity);
_caching.AddObject($"heartRate:{student.StudentNo}", entity, 60);
RedisHelper.SAdd($"school:{student.SchoolCode}:students", student.StudentNo);
}
else if (ble.bs_name.Contains("RS207"))
{
//if (!deviceJMap.TryGetValue(ble.bs_name, out var studentNo)) continue;

View File

@ -4,6 +4,7 @@ using System.Text;
using YD_AllHeartRates.Api.Services.Interface;
using YD_AllHeartRates.Api.Utilities;
using YD_AllHeartRates.Commons.Dto.DataPush;
using YD_AllHeartRates.Commons.MemoryCaches;
namespace YD_AllHeartRates.Api.Services.Impl
{
@ -195,6 +196,14 @@ namespace YD_AllHeartRates.Api.Services.Impl
return new List<StudentEduDto>();
}
private readonly ICaching _caching;
public DataPushService(ICaching caching)
{
_caching = caching;
}
public async Task<SportsRoutineReportResponse> SportsRoutineReport(List<StudentData> data)
{
@ -236,6 +245,9 @@ namespace YD_AllHeartRates.Api.Services.Impl
try
{
jsonPlain = JsonConvert.SerializeObject(package, Formatting.None);
_caching.Add("HeartRateData", jsonPlain);
Console.WriteLine($"[SportsRoutineReport] Package JSON: {jsonPlain}");
}
catch (Exception ex)

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("YD_AllHeartRates.Api")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dcd60ea122e6397c3b9767667ca9ca7a0e84d15c")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+24ee15b7b50692742c8b3b473f35816e9066b2b1")]
[assembly: System.Reflection.AssemblyProductAttribute("YD_AllHeartRates.Api")]
[assembly: System.Reflection.AssemblyTitleAttribute("YD_AllHeartRates.Api")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
184bb69585d31dd16b0e558eb791ebdf94ba1d5005394e88cdc02f2083ad9219
9974da8b4c2c60d16c128ae3f34b19149b967ee33d081a58b7674b52fa6c3185

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("YD_AllHeartRates.Commons")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dcd60ea122e6397c3b9767667ca9ca7a0e84d15c")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+24ee15b7b50692742c8b3b473f35816e9066b2b1")]
[assembly: System.Reflection.AssemblyProductAttribute("YD_AllHeartRates.Commons")]
[assembly: System.Reflection.AssemblyTitleAttribute("YD_AllHeartRates.Commons")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
0725621c579d71a4a2e1f0dedeaa95017b4b1d54526c943a181f6f9946ec33da
5ff03eace3a6603ede58a64881e5f61ecc32706ffbd9bd5953b29181564fa8be

View File

@ -94,11 +94,6 @@
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"linux-x64": {
"#import": []
}
}
}
}

View File

@ -373,379 +373,6 @@
"lib/netcoreapp2.0/_._": {}
}
}
},
"net6.0/linux-x64": {
"Aliyun.OSS.SDK.NetCore/2.14.1": {
"type": "package",
"compile": {
"lib/netstandard2.0/Aliyun.OSS.Core.dll": {
"related": ".pdb;.xml"
}
},
"runtime": {
"lib/netstandard2.0/Aliyun.OSS.Core.dll": {
"related": ".pdb;.xml"
}
}
},
"CSRedisCore/3.8.804": {
"type": "package",
"dependencies": {
"Newtonsoft.Json": "13.0.1",
"System.ValueTuple": "4.5.0"
},
"compile": {
"lib/netstandard2.0/CSRedisCore.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/CSRedisCore.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Http.Abstractions/2.2.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Http.Features": "2.2.0",
"System.Text.Encodings.Web": "4.5.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Http.Features/2.2.0": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.JsonPatch/6.0.0": {
"type": "package",
"dependencies": {
"Microsoft.CSharp": "4.7.0",
"Newtonsoft.Json": "13.0.1"
},
"compile": {
"lib/net6.0/Microsoft.AspNetCore.JsonPatch.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.AspNetCore.JsonPatch.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Mvc.Abstractions/2.2.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Routing.Abstractions": "2.2.0",
"Microsoft.Net.Http.Headers": "2.2.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Mvc.NewtonsoftJson/6.0.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.JsonPatch": "6.0.0",
"Newtonsoft.Json": "13.0.1",
"Newtonsoft.Json.Bson": "1.0.2"
},
"compile": {
"lib/net6.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll": {
"related": ".xml"
}
},
"frameworkReferences": [
"Microsoft.AspNetCore.App"
]
},
"Microsoft.AspNetCore.Routing.Abstractions/2.2.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "2.2.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.AspNetCore.Routing.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.Bcl.AsyncInterfaces/8.0.0": {
"type": "package",
"compile": {
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
"related": ".xml"
}
}
},
"Microsoft.Bcl.TimeProvider/8.0.1": {
"type": "package",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "8.0.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.Bcl.TimeProvider.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Bcl.TimeProvider.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"Microsoft.CSharp/4.7.0": {
"type": "package",
"compile": {
"ref/netcoreapp2.0/_._": {}
},
"runtime": {
"lib/netcoreapp2.0/_._": {}
}
},
"Microsoft.Extensions.Primitives/2.2.0": {
"type": "package",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
},
"compile": {
"lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": {
"related": ".xml"
}
}
},
"Microsoft.IdentityModel.Abstractions/8.3.0": {
"type": "package",
"compile": {
"lib/net6.0/Microsoft.IdentityModel.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.IdentityModel.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/8.3.0": {
"type": "package",
"dependencies": {
"Microsoft.Bcl.TimeProvider": "8.0.1",
"Microsoft.IdentityModel.Tokens": "8.3.0"
},
"compile": {
"lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"related": ".xml"
}
}
},
"Microsoft.IdentityModel.Logging/8.3.0": {
"type": "package",
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.3.0"
},
"compile": {
"lib/net6.0/Microsoft.IdentityModel.Logging.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.IdentityModel.Logging.dll": {
"related": ".xml"
}
}
},
"Microsoft.IdentityModel.Tokens/8.3.0": {
"type": "package",
"dependencies": {
"Microsoft.Bcl.TimeProvider": "8.0.1",
"Microsoft.IdentityModel.Logging": "8.3.0"
},
"compile": {
"lib/net6.0/Microsoft.IdentityModel.Tokens.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.IdentityModel.Tokens.dll": {
"related": ".xml"
}
}
},
"Microsoft.Net.Http.Headers/2.2.0": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0",
"System.Buffers": "4.5.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.Net.Http.Headers.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Net.Http.Headers.dll": {
"related": ".xml"
}
}
},
"Newtonsoft.Json/13.0.3": {
"type": "package",
"compile": {
"lib/net6.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
}
},
"Newtonsoft.Json.Bson/1.0.2": {
"type": "package",
"dependencies": {
"Newtonsoft.Json": "12.0.1"
},
"compile": {
"lib/netstandard2.0/Newtonsoft.Json.Bson.dll": {
"related": ".pdb;.xml"
}
},
"runtime": {
"lib/netstandard2.0/Newtonsoft.Json.Bson.dll": {
"related": ".pdb;.xml"
}
}
},
"System.Buffers/4.5.0": {
"type": "package",
"compile": {
"ref/netcoreapp2.0/_._": {}
},
"runtime": {
"lib/netcoreapp2.0/_._": {}
}
},
"System.IdentityModel.Tokens.Jwt/8.3.0": {
"type": "package",
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.3.0",
"Microsoft.IdentityModel.Tokens": "8.3.0"
},
"compile": {
"lib/net6.0/System.IdentityModel.Tokens.Jwt.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/System.IdentityModel.Tokens.Jwt.dll": {
"related": ".xml"
}
}
},
"System.Memory/4.5.1": {
"type": "package",
"compile": {
"ref/netcoreapp2.1/_._": {}
},
"runtime": {
"lib/netcoreapp2.1/_._": {}
}
},
"System.Runtime.CompilerServices.Unsafe/4.5.1": {
"type": "package",
"compile": {
"ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": {
"related": ".xml"
}
}
},
"System.Text.Encodings.Web/4.5.0": {
"type": "package",
"compile": {
"lib/netstandard2.0/System.Text.Encodings.Web.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/System.Text.Encodings.Web.dll": {
"related": ".xml"
}
}
},
"System.ValueTuple/4.5.0": {
"type": "package",
"compile": {
"ref/netcoreapp2.0/_._": {}
},
"runtime": {
"lib/netcoreapp2.0/_._": {}
}
}
}
},
"libraries": {
@ -1429,11 +1056,6 @@
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100\\RuntimeIdentifierGraph.json"
}
},
"runtimes": {
"linux-x64": {
"#import": []
}
}
}
}

View File

@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "O2pQJnT8voA=",
"dgSpecHash": "66S6RYy996A=",
"success": true,
"projectFilePath": "C:\\Users\\tangl\\Desktop\\Git\\YD_AllHeartRates.Api\\YD_AllHeartRates.Commons\\YD_AllHeartRates.Commons.csproj",
"expectedPackageFiles": [