Commit Graph

46 Commits

Author SHA1 Message Date
niannian zheng
7d37ef5561 refactor(PortfolioService): 重构组合服务方法并优化事务处理
- 将同步方法改为异步方法
- 移除冗余注释并优化代码结构
- 统一事务处理方法调用
- 调整参数命名以提高可读性
2026-03-25 15:23:09 +08:00
OpenClaw Agent
02e199faf2 refactor: 安全性和代码质量改进
🔴 高优先级修复:

1. JWT 密钥安全 (Program.cs)
   - 移除硬编码默认密钥
   - 启动时强制检查环境变量/配置
   - 密钥长度必须 >= 32 字符

2. 数据库事务 (PortfolioService.cs)
   - CreateTransaction 添加事务保护
   - 交易创建、持仓更新、组合更新原子性保证
   - 异常时自动回滚

3. 异步方法改进 (PortfolioService.cs)
   - 移除 .GetAwaiter().GetResult() 阻塞调用
   - 统一使用 async/await 模式

🟡 中优先级:

4. 接口统一 (IPortfolioService.cs)
   - 移除同步方法,只保留异步版本
   - 简化接口,降低维护成本
2026-03-25 06:35:42 +00:00
OpenClaw Agent
42d3fc91c4 fix: Position.Currency 赋值修正
创建组合时,持仓币种应使用 stock.Currency(持仓本身币种),
而非 request.Currency(组合本位币)。

例如:
- 组合本位币 CNY
- 持仓 UPRO 币种 USD
- Position.Currency 应为 USD
2026-03-25 05:44:20 +00:00
OpenClaw Agent
64c1fe60e7 fix: 修复多个金融计算问题
1. CreatePortfolioAsync: 初始建仓交易保存汇率信息
   - 设置 ExchangeRate 和 TotalAmountBase 字段
   - 支持跨币种初始建仓

2. ExchangeRateService: 增强 Mock 汇率降级
   - 扩展支持 EUR、GBP、JPY
   - 未知货币对记录 Error 级别日志

3. PositionItem: 增加 Shares 属性
   - 保留完整精度(解决 Amount int 截断问题)
2026-03-25 05:31:53 +00:00
OpenClaw Agent
19f3cc8679 fix: 历史汇率处理bug + Transaction表增加汇率字段
关键修复:
1. BackfillNavHistoryInternalAsync 汇率处理bug
   - holdings 存储目标币种成本,避免卖出时用当前汇率重转历史成本
   - 优先使用交易时保存的汇率

2. Transaction 表新增字段
   - exchange_rate: 交易时汇率
   - total_amount_base: 本位币金额
   - 创建交易时自动保存汇率

3. CalculateAndSaveDailyNavAsync
   - 优先使用 TotalAmountBase 字段计算成本
   - 回退到当前汇率(兼容历史数据)

4. 新增迁移脚本 sql/migrate_financial_fields.sql
2026-03-25 05:22:50 +00:00
OpenClaw Agent
c411caea17 feat: Position表增加TotalCost字段 + 金融计算单元测试
1. Position实体增加TotalCost字段
   - 精确追踪卖出后的剩余成本
   - 避免用Shares*AvgPrice计算成本的精度问题

2. PortfolioService逻辑更新
   - 买入时更新TotalCost
   - 卖出时按比例减少TotalCost
   - 所有成本计算改用TotalCost字段

3. 增加关键计算步骤日志
   - 创建/更新持仓时记录成本变化
   - 持仓计算时记录关键数值

4. 新增金融计算单元测试
   - 卖出成本计算测试
   - 汇率变化影响测试
   - 夏普比率计算测试
   - 最大回撤计算测试
   - 边界情况测试

5. 提供数据库迁移SQL脚本
2026-03-25 04:27:40 +00:00
OpenClaw Agent
82264ecc25 fix: 修复更多金融计算bug
1. PortfolioNavService: CalculateAndSaveDailyNavAsync 卖出成本计算
   - 使用动态持仓数量字典,而非当前持仓状态
   - 确保多次卖出时比例计算正确

2. PortfolioService: GetPortfolioByIdAsync 盈亏率计算
   - 先转换汇率再计算盈亏率,避免汇率变化影响
   - 正确处理跨币种持仓的盈亏计算
2026-03-25 04:09:55 +00:00
OpenClaw Agent
89c6ca5397 fix: 增强批量获取价格日志级别
- LogWarning → LogError(价格获取失败是严重问题)
- 记录具体错误信息
- 记录 AssetType 用于排查数据源选择问题
2026-03-24 09:45:28 +00:00
OpenClaw Agent
0579e2f47a fix: 修复交易时间解析逻辑
- TransactionDate 和 TransactionTime 正确组合
- 移除 else if 改为独立 if,支持日期+时间
- CreateTransactionAsync 返回实际交易时间而非当前时间
2026-03-24 08:53:47 +00:00
OpenClaw Agent
7bf687323d feat: 添加列表接口价格获取详细日志
定位组合收益率显示为 0 的问题:
- 记录每个股票的价格获取结果
- 记录价格字典查找情况
- 区分价格获取失败 vs 价格为 0 的情况
2026-03-24 08:39:49 +00:00
OpenClaw Agent
7abb8796ec fix: 恢复GetTotalAssets同步方法以满足接口定义 2026-03-17 08:23:31 +00:00
OpenClaw Agent
65abd50108 perf: 优化首页接口性能,批量并行获取价格 2026-03-17 08:18:56 +00:00
OpenClaw Agent
5bc318725d feat: 添加组合更新接口,支持修改名称/策略/状态 2026-03-17 01:50:47 +00:00
OpenClaw Agent
79105c339d fix: 买入后持仓数量和均价正确保存到数据库 2026-03-16 09:08:47 +00:00
OpenClaw Agent
71aa7211d6 fix: 首页组合收益率实时计算 2026-03-16 08:56:14 +00:00
OpenClaw Agent
c7712e57bb feat: 组合列表增加今日涨跌额和持仓数量
- PortfolioListItem 新增 TodayProfit、TodayProfitCurrency 字段
- GetPortfolios 计算今日盈亏(从净值历史)
- Tags 显示持仓数量(如 '运行中 · USD · 3只')
2026-03-15 23:51:32 +00:00
OpenClaw Agent
41ff4a2135 fix: 修复 CurrentPrice 赋值错误
PortfolioService.cs: CurrentPrice 应该赋值为当前价格,而非今日盈亏
2026-03-15 13:49:54 +00:00
niannian zheng
49b9adfdab fix 字段名称错误 2026-03-15 21:44:48 +08:00
OpenClaw Agent
60f3b487ff fix: 修复 PortfolioService 和 PortfolioNavService 变量命名
- 统一局部变量使用 camelCase(C# 规范)
- 修复 DTO 属性名引用
- NavItem -> NavHistoryItem
- 修复 for 循环变量名
2026-03-15 13:31:49 +00:00
OpenClaw Agent
4ce29a1036 refactor: 架构优化 P0-P3
P0 - 安全修复:
- 移除硬编码 API Key,启动时校验必填环境变量

P1 - 高优先级:
- Entity 拆分:Position.cs, Transaction.cs 独立文件
- Controller Facade 封装:IPortfolioFacade 减少依赖注入

P2 - 中优先级:
- Repository 抽象:IPortfolioRepository, IMarketDataRepository
- MarketDataService 拆分:组合模式整合 Tencent/Tiingo/OKX

P3 - 低优先级:
- DTO 命名规范:统一 PascalCase
- 单元测试框架:xUnit + Moq + FluentAssertions
2026-03-15 12:54:05 +00:00
OpenClaw Agent
849db7d2b2 feat: 交易后自动触发净值历史重算
- CreateTransaction完成后删除该交易日期之后的净值记录
- 下次请求收益曲线时自动重新计算
- 修改CreateTransaction为async方法
- 注入IPortfolioNavService到PortfolioService

流程:
1. 用户买入/卖出 → 创建交易记录
2. 删除交易日期之后的净值历史
3. 下次请求收益曲线 → 自动回填缺失数据
2026-03-13 16:53:02 +00:00
OpenClaw Agent
1977dd609d fix: 请求收益曲线时自动回填历史数据
- GetNavHistoryAsync现在会自动检查是否有历史数据
- 无历史数据时自动调用BackfillNavHistoryInternalAsync
- 拆分内部回填方法,避免重复验证权限
2026-03-13 16:21:31 +00:00
9936cbc7f2 优化总资产接口:总收益率保留两位小数 2026-03-12 03:31:04 +00:00
fb5faeee81 修复用户本位币为空字符串时的默认值逻辑,兼容null和空两种情况 2026-03-10 12:48:28 +00:00
dcb80d9b85 添加总资产换算日志,方便排查币种转换问题 2026-03-10 10:18:23 +00:00
146212639b 增加行情接口降级机制:拉不到实时价格时使用成本价作为 fallback 2026-03-10 09:25:43 +00:00
1d99099fca feat: 交易记录接口增加stockCode字段返回 2026-03-10 07:23:34 +00:00
niannian zheng
10132f9b82 添加 using Microsoft.Extensions.Logging; 2026-03-10 14:02:01 +08:00
7ea616c43d fix: 注入ILogger解决当前上下文中不存在_logger的错误 2026-03-10 05:59:40 +00:00
bd7f4d2a3d fix: 处理策略config字段双层转义的问题 2026-03-10 05:45:07 +00:00
02c0864393 feat: 创建组合选择策略时自动带入策略配置的标的作为初始持仓 2026-03-10 05:42:45 +00:00
1a529387e7 fix: 修复变量名冲突错误 CS0136 2026-03-10 03:57:59 +00:00
a23937eac8 feat: 增加组合币种校验,交易币种必须和组合本位币一致 2026-03-10 03:41:41 +00:00
35222fbf26 feat: 组合详情页支持多币种实时汇率换算,统一转换为组合本位币显示 2026-03-10 03:33:58 +00:00
ba60dbc72c feat: 后端增加卖出操作校验,只能卖出已有持仓且数量不超过持仓 2026-03-10 02:48:55 +00:00
c2ed8266cf feat: 支持transactionDate字段,前端传入的交易日期会自动赋值给TransactionTime 2026-03-10 02:17:36 +00:00
虾球
53b4f4501e feat: 完成三个优先级任务:1. 汇率服务替换为真实数据源(带缓存和降级);2. MarketDataService增加统一入口自动路由多数据源;3. 简化PortfolioService调用逻辑 2026-03-09 06:50:22 +00:00
niannian zheng
b5499ef7fe refactor: 将模型属性改为可为空类型以增强健壮性
- 修改ApiResponse、RiskParityConfig等DTO类的属性为可空类型
- 在策略计算器中添加空值检查逻辑
- 更新服务层代码处理可能的空值情况
- 添加发布配置文件FolderProfile.pubxml
2026-03-06 15:51:59 +08:00
虾球
567504119c feat: 完成 P1 任务 - 今日盈亏、风险平价补全、Mock 数据 PreviousClose 2026-03-06 06:00:38 +00:00
fanfpy
4816980d62 feat: 完成 P0-1 实时价格/盈亏计算和 P0-2 汇率服务接口预留 2026-03-05 11:28:49 +00:00
fanfpy
879e500ff9 fix(记账): 支持AssetType、使用实际买入时间、交易状态设为completed 2026-03-05 10:15:00 +00:00
niannian zheng
31c598c4bc feat(策略): 添加策略描述、标签和风险等级字段
扩展策略模型,新增描述、标签(JSON数组)和风险等级字段
更新策略服务以处理新增字段
修改策略DTO和控制器返回更详细的策略信息
更新API文档示例
2026-03-02 17:13:16 +08:00
niannian zheng
564687bc1e refactor: 移除投资组合详情中的交易记录功能
重构投资组合详情响应,移除了不再需要的交易记录相关字段和逻辑
更新了README文档以反映API变更
2026-03-02 15:37:06 +08:00
niannian zheng
9741468f3e feat: 添加用户授权支持并重构组合服务
重构组合服务接口和实现,添加用户ID参数以实现多租户隔离
更新组合控制器,从JWT令牌中提取用户ID并验证权限
完善组合服务数据库操作,包括组合创建、查询和交易处理
更新README文档,补充组合API详细说明
2026-03-02 14:47:16 +08:00
niannian zheng
d39a6347cd feat: 实现微信登录和用户信息管理功能
- 添加微信登录功能,支持通过微信小程序登录
- 实现用户信息管理接口,包括获取用户信息和统计数据
- 新增投资组合列表和总资产统计接口
- 完善JWT令牌生成逻辑,支持可选用户名
- 添加数据库初始化配置和连接字符串
- 移除传统登录和注册功能,专注微信登录方案
2026-02-26 11:56:14 +08:00
niannian zheng
2fe0b0c134 Remove bin and obj directories from Git tracking 2026-02-24 19:25:28 +08:00