diff --git a/AssetManager.API/Controllers/PortfolioController.cs b/AssetManager.API/Controllers/PortfolioController.cs index 7cce11e..7218806 100755 --- a/AssetManager.API/Controllers/PortfolioController.cs +++ b/AssetManager.API/Controllers/PortfolioController.cs @@ -270,18 +270,56 @@ public class PortfolioController : ControllerBase } /// - /// 创建交易(买入/卖出) + /// 计算投资组合当日净值 /// - [HttpPost("{id}/transactions")] - public async Task>> CreateTransaction( - string id, - [FromBody] CreateTransactionRequest request) + [HttpPost("{id}/nav-history/calculate")] + public async Task>> CalculateDailyNav(string id) { var userId = GetCurrentUserId(); try { - var transaction = await _portfolioFacade.CreateTransactionAsync(id, request, userId); + var success = await _portfolioFacade.CalculateDailyNavAsync(id); + return Ok(new ApiResponse + { + code = Models.StatusCodes.Success, + data = new { portfolioId = id, calculated = success }, + message = success ? "净值计算成功" : "净值计算失败" + }); + } + catch (Exception ex) + { + return BadRequest(new ApiResponse + { + code = Models.StatusCodes.BadRequest, + data = null, + message = ex.Message + }); + } + } + + /// + /// 创建交易(买入/卖出) + /// + [HttpPost("transactions")] + public async Task>> CreateTransaction( + [FromBody] CreateTransactionRequest request) + { + var userId = GetCurrentUserId(); + + if (string.IsNullOrEmpty(request.PortfolioId)) + { + return BadRequest(new ApiResponse + { + code = Models.StatusCodes.BadRequest, + data = null, + message = "portfolioId 不能为空" + }); + } + + try + { + var transaction = await _portfolioFacade.CreateTransactionAsync(request.PortfolioId, request, userId); return Ok(new ApiResponse { code = Models.StatusCodes.Success, diff --git a/AssetManager.Services/IPortfolioFacade.cs b/AssetManager.Services/IPortfolioFacade.cs index 51f1945..b686d2b 100644 --- a/AssetManager.Services/IPortfolioFacade.cs +++ b/AssetManager.Services/IPortfolioFacade.cs @@ -61,4 +61,9 @@ public interface IPortfolioFacade /// 获取用户总资产 /// Task GetTotalAssetsAsync(string userId); + + /// + /// 计算投资组合当日净值 + /// + Task CalculateDailyNavAsync(string portfolioId); } diff --git a/AssetManager.Services/PortfolioFacade.cs b/AssetManager.Services/PortfolioFacade.cs index 6b3809f..7c8ac0c 100644 --- a/AssetManager.Services/PortfolioFacade.cs +++ b/AssetManager.Services/PortfolioFacade.cs @@ -195,4 +195,13 @@ public class PortfolioFacade : IPortfolioFacade _logger.LogInformation("获取用户总资产: {UserId}", userId); return await _portfolioService.GetTotalAssetsAsync(userId); } + + /// + /// 计算投资组合当日净值 + /// + public async Task CalculateDailyNavAsync(string portfolioId) + { + _logger.LogInformation("计算投资组合当日净值: {PortfolioId}", portfolioId); + return await _navService.CalculateAndSaveDailyNavAsync(portfolioId); + } }