fix: 修复记录时间

This commit is contained in:
橙子
2025-03-11 22:00:11 +08:00
parent 8ef91ebd03
commit 85ed4df1e4
3 changed files with 20 additions and 17 deletions

View File

@@ -93,11 +93,11 @@ namespace Yi.Framework.Stock.Application.Services
var query = _stockPriceRecordRepository._DbQueryable var query = _stockPriceRecordRepository._DbQueryable
.WhereIF(input.StockId.HasValue, p => p.StockId == input.StockId.Value) .WhereIF(input.StockId.HasValue, p => p.StockId == input.StockId.Value)
.WhereIF(input.StartTime.HasValue, p => p.CreationTime >= input.StartTime.Value) .WhereIF(input.StartTime.HasValue, p => p.RecordTime >= input.StartTime.Value)
.WhereIF(input.EndTime.HasValue, p => p.CreationTime <= input.EndTime.Value) .WhereIF(input.EndTime.HasValue, p => p.RecordTime <= input.EndTime.Value)
.WhereIF(input.PeriodType.HasValue, p => p.PeriodType == input.PeriodType.Value) .WhereIF(input.PeriodType.HasValue, p => p.PeriodType == input.PeriodType.Value)
.OrderByIF(!string.IsNullOrEmpty(input.Sorting),input.Sorting) .OrderByIF(!string.IsNullOrEmpty(input.Sorting),input.Sorting)
.OrderByIF(string.IsNullOrEmpty(input.Sorting),p=>p.CreationTime,OrderByType.Desc); .OrderByIF(string.IsNullOrEmpty(input.Sorting),p=>p.RecordTime,OrderByType.Desc);
var list = await query var list = await query
.Select(p => new StockPriceRecordDto .Select(p => new StockPriceRecordDto

View File

@@ -211,7 +211,7 @@ namespace Yi.Framework.Stock.Domain.Managers
// 获取最新的价格记录 // 获取最新的价格记录
var latestPriceRecord = await _stockPriceRecordRepository._DbQueryable var latestPriceRecord = await _stockPriceRecordRepository._DbQueryable
.Where(p => p.StockId == stockId) .Where(p => p.StockId == stockId)
.OrderByDescending(p => p.CreationTime) .OrderByDescending(p => p.RecordTime)
.FirstAsync(); .FirstAsync();
if (latestPriceRecord == null) if (latestPriceRecord == null)
@@ -284,9 +284,6 @@ namespace Yi.Framework.Stock.Domain.Managers
throw new UserFriendlyException($"股票ID {record.StockId} 的价格必须大于0"); throw new UserFriendlyException($"股票ID {record.StockId} 的价格必须大于0");
} }
// 设置记录时间当前时间加上i个小时只记录到年月日小时
record.RecordTime = new DateTime(DateTime.Now.AddHours(i).Year, DateTime.Now.AddHours(i).Month, DateTime.Now.AddHours(i).Day, DateTime.Now.AddHours(i).Hour, 0, 0);
// 计算交易额(如果未设置) // 计算交易额(如果未设置)
if (record.Turnover == 0 && record.Volume > 0) if (record.Turnover == 0 && record.Volume > 0)
{ {
@@ -316,6 +313,9 @@ namespace Yi.Framework.Stock.Domain.Managers
// 将StockModel转换为StockPriceRecordEntity // 将StockModel转换为StockPriceRecordEntity
var priceRecords = new List<StockPriceRecordEntity>(); var priceRecords = new List<StockPriceRecordEntity>();
// 获取当前小时的起始时间点
var currentHour = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 0, 0);
foreach (var stockModel in stockModels) foreach (var stockModel in stockModels)
{ {
if (stockModel.Values == null || !stockModel.Values.Any()) if (stockModel.Values == null || !stockModel.Values.Any())
@@ -329,16 +329,20 @@ namespace Yi.Framework.Stock.Domain.Managers
continue; continue;
} }
// 为每个价格点创建一个记录 // 为每个价格点创建一个记录,并设置递增的时间
foreach (var priceValue in stockModel.Values) for (int i = 0; i < stockModel.Values.Count(); i++)
{ {
var priceValue = stockModel.Values[i];
var recordTime = currentHour.AddHours(i); // 从当前小时开始每个价格点加1小时
var priceRecord = new StockPriceRecordEntity var priceRecord = new StockPriceRecordEntity
{ {
StockId = stockMarket.Id, StockId = stockMarket.Id,
CurrentPrice = priceValue, CurrentPrice = priceValue,
Volume = 0, // 可以根据实际情况设置 Volume = 0, // 可以根据实际情况设置
Turnover = 0, // 可以根据实际情况设置 Turnover = 0, // 可以根据实际情况设置
PeriodType = PeriodTypeEnum.Hour PeriodType = PeriodTypeEnum.Hour,
RecordTime = recordTime // 直接在这里设置时间
}; };
priceRecords.Add(priceRecord); priceRecords.Add(priceRecord);
@@ -348,7 +352,7 @@ namespace Yi.Framework.Stock.Domain.Managers
// 批量保存价格记录 // 批量保存价格记录
if (priceRecords.Any()) if (priceRecords.Any())
{ {
await BatchSaveStockPriceRecordsAsync(priceRecords); await _stockPriceRecordRepository.InsertManyAsync(priceRecords);
} }
} }
@@ -371,8 +375,8 @@ namespace Yi.Framework.Stock.Domain.Managers
} }
catch catch
{ {
// 如果获取价格失败,使用默认值或跳过 // 如果获取价格失败,使用默认价格10
continue; result.Add(stock.Id, 10m);
} }
} }

View File

@@ -303,8 +303,8 @@ const fetchStockPriceRecords = async () => {
// 计算时间范围: 今天的近5个小时 // 计算时间范围: 今天的近5个小时
const now = dayjs(); const now = dayjs();
const endTime = now.format('YYYY-MM-DD HH:00'); const endTime = now.format('YYYY-MM-DD HH:00:00');
const startTime = now.subtract(5, 'hour').format('YYYY-MM-DD HH:00'); const startTime = now.subtract(24, 'hour').format('YYYY-MM-DD HH:00:00');
// 获取当前选中股票的ID // 获取当前选中股票的ID
// 注意这里假设stockList中的id就是后端的stockId如果不是需要调整 // 注意这里假设stockList中的id就是后端的stockId如果不是需要调整
@@ -316,8 +316,7 @@ const fetchStockPriceRecords = async () => {
return; return;
} }
// const { data } = await getStockPriceRecords(stockId, startTime, endTime); const { data } = await getStockPriceRecords(stockId, startTime, endTime);
const { data } = await getStockPriceRecords(stockId, '2025-03-08 21:00', '2025-03-09 21:00');
// 将API返回的数据映射到图表所需的格式 // 将API返回的数据映射到图表所需的格式
stockChartData.value = (data.items || []).map(item => ({ stockChartData.value = (data.items || []).map(item => ({
date: dayjs(item.recordTime).format('MM-DD HH'), date: dayjs(item.recordTime).format('MM-DD HH'),