diff --git a/.dockerignore b/.dockerignore old mode 100644 new mode 100755 diff --git a/.env.example b/.env.example old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/AssetManager.API/AssetManager.API.csproj b/AssetManager.API/AssetManager.API.csproj old mode 100644 new mode 100755 diff --git a/AssetManager.API/AssetManager.API.http b/AssetManager.API/AssetManager.API.http old mode 100644 new mode 100755 diff --git a/AssetManager.API/Controllers/AuthController.cs b/AssetManager.API/Controllers/AuthController.cs old mode 100644 new mode 100755 diff --git a/AssetManager.API/Controllers/StrategyController.cs b/AssetManager.API/Controllers/StrategyController.cs old mode 100644 new mode 100755 diff --git a/AssetManager.API/Controllers/TickerController.cs b/AssetManager.API/Controllers/TickerController.cs old mode 100644 new mode 100755 diff --git a/AssetManager.API/Controllers/UserController.cs b/AssetManager.API/Controllers/UserController.cs old mode 100644 new mode 100755 diff --git a/AssetManager.API/Middleware/GlobalExceptionMiddleware.cs b/AssetManager.API/Middleware/GlobalExceptionMiddleware.cs old mode 100644 new mode 100755 diff --git a/AssetManager.API/Middleware/RateLimitMiddleware.cs b/AssetManager.API/Middleware/RateLimitMiddleware.cs old mode 100644 new mode 100755 diff --git a/AssetManager.API/Properties/PublishProfiles/FolderProfile.pubxml b/AssetManager.API/Properties/PublishProfiles/FolderProfile.pubxml old mode 100644 new mode 100755 diff --git a/AssetManager.API/Properties/launchSettings.json b/AssetManager.API/Properties/launchSettings.json old mode 100644 new mode 100755 diff --git a/AssetManager.API/appsettings.Development.json b/AssetManager.API/appsettings.Development.json old mode 100644 new mode 100755 diff --git a/AssetManager.Data/AssetManager.Data.csproj b/AssetManager.Data/AssetManager.Data.csproj old mode 100644 new mode 100755 diff --git a/AssetManager.Data/DatabaseExtensions.cs b/AssetManager.Data/DatabaseExtensions.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Data/DatabaseService.cs b/AssetManager.Data/DatabaseService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Data/MarketKlineCache.cs b/AssetManager.Data/MarketKlineCache.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Data/MarketPriceCache.cs b/AssetManager.Data/MarketPriceCache.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Data/Portfolio.cs b/AssetManager.Data/Portfolio.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Data/README.md b/AssetManager.Data/README.md old mode 100644 new mode 100755 diff --git a/AssetManager.Data/SqlSugarConfig.cs b/AssetManager.Data/SqlSugarConfig.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Data/Strategy.cs b/AssetManager.Data/Strategy.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Data/TiingoTicker.cs b/AssetManager.Data/TiingoTicker.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Data/User.cs b/AssetManager.Data/User.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/AssetManager.Infrastructure.csproj b/AssetManager.Infrastructure/AssetManager.Infrastructure.csproj old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/Services/ExchangeRateService.cs b/AssetManager.Infrastructure/Services/ExchangeRateService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/Services/IExchangeRateService.cs b/AssetManager.Infrastructure/Services/IExchangeRateService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/Services/IMarketDataService.cs b/AssetManager.Infrastructure/Services/IMarketDataService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/Services/MarketDataService.cs b/AssetManager.Infrastructure/Services/MarketDataService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/Services/MockExchangeRateService.cs b/AssetManager.Infrastructure/Services/MockExchangeRateService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/Services/MockMarketDataService.cs b/AssetManager.Infrastructure/Services/MockMarketDataService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/StrategyEngine/Calculators/ChandelierExitCalculator.cs b/AssetManager.Infrastructure/StrategyEngine/Calculators/ChandelierExitCalculator.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/StrategyEngine/Calculators/MaTrendCalculator.cs b/AssetManager.Infrastructure/StrategyEngine/Calculators/MaTrendCalculator.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/StrategyEngine/Calculators/RiskParityCalculator.cs b/AssetManager.Infrastructure/StrategyEngine/Calculators/RiskParityCalculator.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/StrategyEngine/IStrategyCalculator.cs b/AssetManager.Infrastructure/StrategyEngine/IStrategyCalculator.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/StrategyEngine/IStrategyEngine.cs b/AssetManager.Infrastructure/StrategyEngine/IStrategyEngine.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/StrategyEngine/StrategyEngine.cs b/AssetManager.Infrastructure/StrategyEngine/StrategyEngine.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/StrategyEngine/StrategyEngineExtensions.cs b/AssetManager.Infrastructure/StrategyEngine/StrategyEngineExtensions.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Infrastructure/StrategyEngine/TechnicalIndicators.cs b/AssetManager.Infrastructure/StrategyEngine/TechnicalIndicators.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/ApiResponse.cs b/AssetManager.Models/ApiResponse.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/AssetManager.Models.csproj b/AssetManager.Models/AssetManager.Models.csproj old mode 100644 new mode 100755 diff --git a/AssetManager.Models/Currency.cs b/AssetManager.Models/Currency.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/AuthDTO.cs b/AssetManager.Models/DTOs/AuthDTO.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/ChandelierExitConfig.cs b/AssetManager.Models/DTOs/ChandelierExitConfig.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/MaTrendConfig.cs b/AssetManager.Models/DTOs/MaTrendConfig.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/MarketDTO.cs b/AssetManager.Models/DTOs/MarketDTO.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/RiskParityConfig.cs b/AssetManager.Models/DTOs/RiskParityConfig.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/StrategyDTO.cs b/AssetManager.Models/DTOs/StrategyDTO.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/StrategySignal.cs b/AssetManager.Models/DTOs/StrategySignal.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/StrategyType.cs b/AssetManager.Models/DTOs/StrategyType.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/TickerDTO.cs b/AssetManager.Models/DTOs/TickerDTO.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Models/DTOs/UserDTO.cs b/AssetManager.Models/DTOs/UserDTO.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Services/AssetManager.Services.csproj b/AssetManager.Services/AssetManager.Services.csproj old mode 100644 new mode 100755 diff --git a/AssetManager.Services/IPortfolioService.cs b/AssetManager.Services/IPortfolioService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Services/IStrategyService.cs b/AssetManager.Services/IStrategyService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Services/ITickerService.cs b/AssetManager.Services/ITickerService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Services/PortfolioNavService.cs b/AssetManager.Services/PortfolioNavService.cs index 4e7301a..6afacd2 100644 --- a/AssetManager.Services/PortfolioNavService.cs +++ b/AssetManager.Services/PortfolioNavService.cs @@ -44,6 +44,17 @@ public class PortfolioNavService : IPortfolioNavService var endDate = request.endDate ?? DateTime.Today; var startDate = request.startDate ?? endDate.AddDays(-30); + // 检查是否有历史数据,没有则自动回填 + var existingCount = await _db.Queryable() + .Where(n => n.PortfolioId == portfolioId) + .CountAsync(); + + if (existingCount == 0) + { + _logger.LogInformation("组合 {PortfolioId} 无净值历史数据,自动开始回填", portfolioId); + await BackfillNavHistoryInternalAsync(portfolioId, portfolio); + } + // 查询净值历史 var navHistory = await _db.Queryable() .Where(n => n.PortfolioId == portfolioId) @@ -244,6 +255,14 @@ public class PortfolioNavService : IPortfolioNavService throw new Exception("Portfolio not found or access denied"); } + return await BackfillNavHistoryInternalAsync(portfolioId, portfolio, force); + } + + /// + /// 内部回填方法(已验证权限) + /// + private async Task BackfillNavHistoryInternalAsync(string portfolioId, Portfolio portfolio, bool force = false) + { // 获取所有交易记录,按时间排序 var transactions = await _db.Queryable() .Where(t => t.PortfolioId == portfolioId) @@ -288,10 +307,6 @@ public class PortfolioNavService : IPortfolioNavService // 遍历每个交易日 for (var date = startDate; date <= endDate; date = date.AddDays(1)) { - // 跳过周末(可选,美股周末无交易) - // if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) - // continue; - // 检查是否已存在该日期的净值记录(非强制模式) if (!force) { diff --git a/AssetManager.Services/PortfolioService.cs b/AssetManager.Services/PortfolioService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Services/Services/JwtService.cs b/AssetManager.Services/Services/JwtService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Services/Services/WechatService.cs b/AssetManager.Services/Services/WechatService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Services/StrategyService.cs b/AssetManager.Services/StrategyService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.Services/TickerService.cs b/AssetManager.Services/TickerService.cs old mode 100644 new mode 100755 diff --git a/AssetManager.sln b/AssetManager.sln old mode 100644 new mode 100755 diff --git a/DEPLOY.md b/DEPLOY.md old mode 100644 new mode 100755 diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/docker-compose.yml b/docker-compose.yml old mode 100644 new mode 100755