fix: 策略相关修复
1. GetPortfolioDetailAsync: 移除硬编码逻辑模型信息
- 根据策略ID从数据库读取真实策略信息
- 无策略时返回 null,前端显示'未绑定策略'
2. GetStrategies: 修复返回格式
- 改为返回 { items: [...] } 格式,匹配前端期望
- 修复 StrategyListResponse.Items 类型为 StrategyListItemDto
This commit is contained in:
parent
7d37ef5561
commit
9b576de069
@ -64,7 +64,7 @@ public class StrategyController : ControllerBase
|
||||
/// 此接口用于获取当前登录用户的所有策略列表。
|
||||
/// </remarks>
|
||||
[HttpGet("strategies")]
|
||||
public ActionResult<ApiResponse<List<StrategyListItemDto>>> GetStrategies()
|
||||
public ActionResult<ApiResponse<StrategyListResponse>> GetStrategies()
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -74,12 +74,12 @@ public class StrategyController : ControllerBase
|
||||
var strategies = _strategyService.GetStrategies(userId);
|
||||
var strategyListItems = strategies.Select(MapToStrategyListItemDTO).ToList();
|
||||
|
||||
_logger.LogInformation("Strategies retrieved successfully");
|
||||
_logger.LogInformation("Strategies retrieved successfully, count: {Count}", strategyListItems.Count);
|
||||
|
||||
return Ok(new ApiResponse<List<StrategyListItemDto>>
|
||||
return Ok(new ApiResponse<StrategyListResponse>
|
||||
{
|
||||
code = AssetManager.Models.StatusCodes.Success,
|
||||
data = strategyListItems,
|
||||
data = new StrategyListResponse { Items = strategyListItems },
|
||||
message = "Success"
|
||||
});
|
||||
}
|
||||
@ -87,7 +87,7 @@ public class StrategyController : ControllerBase
|
||||
{
|
||||
_logger.LogError(ex, "Error retrieving strategies");
|
||||
|
||||
return StatusCode(AssetManager.Models.StatusCodes.InternalServerError, new ApiResponse<List<StrategyListItemDto>>
|
||||
return StatusCode(AssetManager.Models.StatusCodes.InternalServerError, new ApiResponse<StrategyListResponse>
|
||||
{
|
||||
code = AssetManager.Models.StatusCodes.InternalServerError,
|
||||
data = null,
|
||||
|
||||
@ -5,7 +5,7 @@ namespace AssetManager.Models.DTOs;
|
||||
/// </summary>
|
||||
public class StrategyListResponse
|
||||
{
|
||||
public List<StrategyItem>? Items { get; set; }
|
||||
public List<StrategyListItemDto>? Items { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -550,27 +550,48 @@ public class PortfolioService : IPortfolioService
|
||||
decimal TotalReturn = totalPortfolioValue - totalCost;
|
||||
double totalReturnRate = totalCost > 0 ? (double)(TotalReturn / totalCost * 100) : 0;
|
||||
|
||||
// 获取策略信息(如果有的话)
|
||||
StrategyInfo? strategyInfo = null;
|
||||
string? logicModel = null;
|
||||
string? logicModelStatus = null;
|
||||
string? logicModelDescription = null;
|
||||
|
||||
if (!string.IsNullOrEmpty(portfolio.StrategyId))
|
||||
{
|
||||
var strategy = _db.Queryable<Strategy>()
|
||||
.Where(s => s.Id == portfolio.StrategyId)
|
||||
.First();
|
||||
|
||||
if (strategy != null)
|
||||
{
|
||||
strategyInfo = new StrategyInfo
|
||||
{
|
||||
Id = strategy.Id,
|
||||
Name = strategy.Name,
|
||||
Description = strategy.Description
|
||||
};
|
||||
logicModel = strategy.Name;
|
||||
logicModelStatus = "监控中";
|
||||
logicModelDescription = strategy.Description;
|
||||
}
|
||||
}
|
||||
|
||||
return new PortfolioDetailResponse
|
||||
{
|
||||
Id = portfolio.Id,
|
||||
Name = portfolio.Name,
|
||||
Currency = targetCurrency,
|
||||
Status = portfolio.Status,
|
||||
Strategy = new StrategyInfo
|
||||
{
|
||||
Id = portfolio.StrategyId,
|
||||
Name = "策略名称",
|
||||
Description = "策略描述"
|
||||
},
|
||||
Strategy = strategyInfo,
|
||||
PortfolioValue = (double)totalPortfolioValue,
|
||||
TotalReturn = (double)TotalReturn,
|
||||
TodayProfit = (double)totalTodayProfit,
|
||||
HistoricalChange = totalReturnRate,
|
||||
DailyVolatility = 0, // 后续实现
|
||||
DailyVolatility = 0,
|
||||
TodayProfitCurrency = targetCurrency,
|
||||
LogicModel = "HFEA 风险平价逻辑",
|
||||
LogicModelStatus = "监控中",
|
||||
LogicModelDescription = "目标权重 季度调仓",
|
||||
LogicModel = logicModel,
|
||||
LogicModelStatus = logicModelStatus,
|
||||
LogicModelDescription = logicModelDescription,
|
||||
TotalItems = Positions.Count,
|
||||
TotalRatio = 100.0,
|
||||
Positions = positionItems
|
||||
|
||||
7
sql/fix_strategy_id_nullable.sql
Normal file
7
sql/fix_strategy_id_nullable.sql
Normal file
@ -0,0 +1,7 @@
|
||||
-- 修改 portfolios 表 strategy_id 字段允许 NULL
|
||||
-- 组合可能不使用任何策略,所以应该允许 NULL
|
||||
|
||||
ALTER TABLE portfolios MODIFY COLUMN strategy_id VARCHAR(50) NULL;
|
||||
|
||||
-- 验证
|
||||
DESCRIBE portfolios;
|
||||
Loading…
Reference in New Issue
Block a user