Commit Graph
806 Commits
Author SHA1 Message Date
尹峰 5b34c3a9ca 修改标的类型和合约类型传参&优化规则应用启停逻辑 2026-07-14 20:35:17 +08:00
ruisu 78cf89be0d fix:修改风控application字段,将标的类型字段修改为UnderlyingAssetClass,内容为汉字 2026-07-14 18:33:45 +08:00
ruisu 7784e66289 Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine 2026-07-14 17:18:47 +08:00
ruisu 8e0e779133 feat:根据ai merge意见修改:dbContext取消与单例riskEngienService的绑定,反射代码修改。
支持老风控Error情况下的二次特批
2026-07-14 17:18:33 +08:00
尹峰 4dc1fc3b4b 优化异步逻辑 2026-07-13 18:57:36 +08:00
尹峰 20795e6610 Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine 2026-07-13 15:51:32 +08:00
尹峰 0a8ee77f3c 优化缓存刷新逻辑 2026-07-13 15:51:17 +08:00
ruisu 0e90c6f0cc Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine 2026-07-13 15:48:21 +08:00
ruisu 82688fa930 feat:风控引擎内存上下文改为查询数据库,修改注释中的相应规则, 2026-07-13 15:47:37 +08:00
尹峰 abf2cf5985 规则和应用增加description字段&变量和规则保存校验公式编译有效性 2026-07-10 18:23:39 +08:00
ruisu b5f6b7f61a feat:增加ruleid为空的校验,以支持rule新增。增加preload成功编译rule的日志 2026-07-10 10:31:41 +08:00
ruisu e04333cf70 Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine 2026-07-09 18:08:40 +08:00
ruisu 18fdb9e9f1 feat:增加单条rule增删改函数,以及application全量刷新函数。 2026-07-09 18:01:55 +08:00
尹峰 c1ded96985 变量级联更新规则优化&增补注释 2026-07-09 17:52:14 +08:00
ruisu 66381e5dc4 feat:在系统缓存刷新功能内,增加风控引擎缓存刷新 2026-07-09 17:41:10 +08:00
ruisu 4e6d887b68 feat:修改本地规则 2026-07-09 16:18:28 +08:00
ruisu 48d90bef50 Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine 2026-07-09 10:26:44 +08:00
ruisu d14bdc18e7 feat:风控引擎增加超时机制:在进行超时校验的时候,如果超时,不但重置新风控重新校验,老风控的二次校验也不允许直接放行,需要重新校验。 2026-07-09 10:26:26 +08:00
尹峰 fc51bfab68 恢复被revert误操作的文件 2026-07-08 10:59:13 +08:00
尹峰 b8fb8bb148 resolve confilct YLContext.cs & YLErpDAL.csproj 2026-07-07 15:25:27 +08:00
ruisu 879fdbea89 resolve confilct QuotaMonitorService.cs 2026-07-07 15:11:37 +08:00
ruisu 2a8544a7b7 fix:删除测试数据 2026-07-07 14:52:47 +08:00
尹峰 8ab62928b6 revert otcformat.js 2026-07-07 13:57:38 +08:00
尹峰 de628719dc resolve confilct QuotaMonitorService.cs 2026-07-07 13:51:24 +08:00
尹峰 d5cbd45a8a Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine 2026-07-06 18:42:35 +08:00
尹峰 d7d9c796d8 merge glms/feature/1.4.2 0703版本 2026-07-06 18:42:19 +08:00
ruisu 1c0fd97efa fix:删除测试数据 2026-07-06 18:00:06 +08:00
ruisu dc0cb9ec7b feat:老风控特批使用单独bool量识别,新风控需审批采用新状态RiskWarning,风控流程状态优先级Error>Warning(老风控特批,给前端CODE为ERROR)>RiskWarning>Success(可能带有ShowTIip)。新风控特批时,识别RULEID,不再采用BOOL统一通过 2026-07-06 17:41:13 +08:00
hjhan 088df27011 fix(swap): 还原otcformat.js精度配置,修复期末全价只能录2位小数
f0ad4406(Revert ruisu合并进来的代码)在回滚RiskModule时,
误将otcformat.js从'压缩单行全precision=9'改成'多行precision=2',
导致StockEqvNotional/tradeSinglePrice/tradePrice/notional等字段
精度从9位降到2位,期末全价(TradingAmountAvg)等只能录2位小数。

还原到f0ad4406^的正确版本(全precision=9),恢复所有字段9位精度。

根因:前端运行时配置App_Data/Config/otcformat.js的precision限制,
与后端实体(EF默认decimal)和DB列(decimal(22,10))无关。

历史脉络:
- 3e650b8f(2026-05-28) 首次引入precision=2误伤
- 1932a2e7(2026-05-29) 首次还原回全9
- f0ad4406(2026-07-03) Revert ruisu时再次误伤(本次修复对象)
2026-07-06 09:55:01 +08:00
lisong d3a47e6d08 Merge branch 'glms/feature/1.4.2' of https://gitee.glmszq.com/gsty/onederiv/trs into glms/feature/1.4.2_claer 2026-07-03 19:08:48 +08:00
锦麟 王 f0ad4406c9 Revert ruisu合并进来的代码 2026-07-03 17:41:42 +08:00
tengyufan cf15877bfd fix: 新增交易时开始日期默认值取系统日期,不再按CHN日历调整到下一工作日
问题:系统日期0703在CHN日历中为假日,GetNonHoliday将默认TradeDate
调整为0706,但预期行为是默认值始终取系统日期0703

修改:TradeDate默认值赋值处跳过GetNonHoliday调整,直接使用
valuedateBLL.ValueDate
2026-07-03 13:57:59 +08:00
tengyufan 2e50bb2615 fix: 修复交易参数页面保存按钮不显示的问题
FunctionRight.xml 中 系统日期设置/交易特批/出金特批/交易相关/
平仓行权复核/平仓行权审批 等权限挂在 FunctionParent"系统管理"下,
导致 DB 中 key 为"系统管理-XXX",但代码引用"系统参数-XXX",
HasRight 始终找不到,保存按钮不显示。

修复:修改 FunctionRight.xml,新增独立 FunctionParent"系统参数"节点
将22个系统参数权限移入,与代码引用的 key 对齐。
2026-07-03 13:13:48 +08:00
hjhan cc8b862d04 fix: ETF交易确认书 债券名称置空 2026-07-03 11:28:07 +08:00
hjhan b6faa6fd1c fix: 国联民生确认书模板 0-> 0.00 2026-07-03 11:24:04 +08:00
hjhan 32bcf9beb9 refactor(swap): FindTrade seam上提基类消除三子类重复
SwapDealService/SwapEodPositionService/SwapFlowEventService 三处 FindTrade(int)
签名和实现完全一致(DbContext.trade.Find),上提到 SwapTradeBaseService 基类。

核对确认可安全上提的只有 FindTrade(三者逐字一致):
- FindTradeExtend 不可上提: SwapEodPositionService 用 FirstOrDefault,
  SwapFlowEventService 用 First(找不到抛异常),语义不同。
- FindPositions 不可上提: SwapEodPositionService 含 IsInitial 持仓,
  SwapFlowEventService 排除 IsInitial + AsNoTracking,语义不同。

测试 stub override FindTrade 跨基类层级正常工作,C# virtual 多态不受影响。
SwapModule 171测试全绿,无回归。
2026-07-03 09:52:57 +08:00
hjhan b501e21904 test(swap): 启用MergeCompose场景6/7+SwapFlowEventService录制钩子+RecordingSwapFlowEventService
1. MergeComposeScenarioTest 场景6/7 启用(去掉Ignore):
   此前失败是stale binary(未重新编译),重新build后8场景全部通过。
   - 场景6 单条merge无持仓→DealNoPosition创建交易
   - 场景7 两条merge无持仓→创建交易+平仓

2. SwapFlowEventService 补OnBefore/OnAfterMergePageEvent录制钩子(默认空实现):
   - OnBefore: DB查询完成、合成逻辑执行前触发,可捕获输入快照
   - OnAfter: PersistEvents后触发,捕获输出事件
   生产路径为空方法体,零行为影响。

3. 移植RecordingSwapFlowEventService(借鉴testable分支):
   override OnAfterMergePageEvent录制golden文件,备用录制工具。
   内联GoldenFileModel(简单POCO)。FullRecord_WithPreBookingPositions连库测试自动跳过。

SwapModule 171测试全绿,无回归。
2026-07-03 09:38:05 +08:00
hjhan f0ef37b599 test(swap): SwapFlowEventService seam改造+MergePageEventScenarioTest(6场景全绿)
借鉴 testable 分支,只取 seam(排除 PosiPnl/NetSettmentAmount 公式改动和 MergePageEvent 拆分),
填补当前分支对开平仓合成(MergePageEvent)零覆盖的空白。

SwapFlowEventService 新增11个 protected virtual seam:
- FindTrade/FindTradeExtend/FindPositions/FindAndInvalidateFutureEvents
- GetUnderlying/GetNextBusinessDay/ResolvePositionId
- PersistEvents(替代InitEvent内联Add+SaveChanges)/BeginTransaction/CommitTransaction/RollbackTransaction
MergePageEvent/InitEvent: private→protected virtual,内联DB调用替换为seam。
InitEvent 移除 DbContext.swap_flow_event.Add(转入PersistEvents,纯函数化)。
SwapTradeBaseService.UpdateDbOption: public void→public virtual(测试override用)。

新增测试(借鉴testable分支):
- TestableSwapFlowEventService.cs(集中式共享包装类)
- MergePageEventScenarioTest.cs(6场景全绿):
  Scenario1 单条无持仓开仓 / Scenario2 同向追加 / Scenario3 反向全平
  Scenario4 反向部分平+开 / Scenario5 一开一平 / Scenario6 复杂组合

**未借鉴**:SearchPositionFlowEvent的PosiPnl/NetSettmentAmount公式改动(行为变更)、
MergePageEvent拆分ProcessSingleFlow等(非必需重构)。
SwapModule 169测试全绿(+6),无回归。
2026-07-03 09:26:13 +08:00
hjhan 6e9bae94c5 test(swap): MergeRestModeCompose seam调用替换+移植MergeComposeScenarioTest(6/8场景)
借鉴 testable 分支,把 SwapTradeAutoService 的 MergeRestModeCompose/MergeRestModelItem/
DealNoPosition/DealHasPosition 内联DB调用替换为seam调用,生产行为不变。

替换的调用点:
- MergeRestModeCompose: FindActiveSwapTrades/FindTradeExtends/FindActivePositions/GetNextBusinessDayBefore/QueryFloatRates
- MergeRestModelItem: FindClient/GetEtradingRule/FindAssetUnit/FindUnderlying/GetSwapFloatRate/FindFlowEventsForCashCheck/FindValidTrades/SaveChanges
- DealNoPosition: CreateNewSwapTrade/AutoSwapUnwind
- DealHasPosition: AutoSwapUnwind

新增测试(借鉴testable分支):
- TestableSwapTradeAutoService.cs(集中式共享包装类)
- MergeComposeScenarioTest.cs(8场景):
  Scenario1-5/8 通过: 客户/权限/账户/标的校验链 + 空流水返回
  Scenario6/7 [Ignore]: 创建交易路径,DealNoPosition内部实现细节待对齐后启用

SwapModule 163测试全绿(+6),无回归。
2026-07-03 09:20:59 +08:00
hjhan 6b24e6e979 refactor(swap): SwapTradeAutoService补18个virtual seam(借鉴testable分支)
借鉴 origin/glms/feature/refactor-swap-event-testable 的可测性改造,
当前分支 SwapTradeAutoService 此前0个seam,纯新增#region可测试化区域,无冲突。

18个protected virtual seam(默认实现=原代码,行为不变):
- 日历: GetNextBusinessDay/GetNextBusinessDayBefore
- 计算: CalculateBondYtm
- 持久化: PersistMerge/SetModelOpt/SaveChanges
- 查询: FindActiveSwapTrades/FindTradeExtends/FindActivePositions/FindActivePositionsAll/
        QueryFloatRates/FindClient/FindAssetUnit/FindUnderlying/FindFlowEventsForCashCheck/FindValidTrades
- 协作服务: GetEtradingRule/GetSwapFloatRate/CreateNewSwapTrade/AutoSwapUnwind

为后续 MergeComposeScenarioTest(自动簿记流程测试)铺路。
SwapModule 157测试全绿,seam未被override时按生产实现执行,行为不变。
2026-07-03 09:08:12 +08:00
hjhan 178f1d7db8 docs(swap): 借鉴testable分支的Seam实践指南(团队规范沉淀)
从 origin/glms/feature/refactor-swap-event-testable 的 docs/seams-pattern-practice-guide.md 借鉴。
内容:Protected Virtual Seams 模式方法论、依赖类型提取策略表、可测试子类模式、
三层测试体系(合成+黄金+端到端)、命名约定、渐进节奏、6条经验教训。
与当前分支已采用的 seam 模式(SwapDealService/SwapEodPositionService)一致,作团队规范。
2026-07-03 09:05:37 +08:00
hjhan e4a92c93ee feat(swap): 后端只读校验告警-搬FrontendCalcReference+SwapIncome/SwapUnwind插校验
前端保持快速反馈(用户改输入立即算),后端不替代前端,仅做合理性兜底校验。

1. 搬FrontendCalcReference到YLErpDAL/Helpers(测试与生产共用同一份公式,避免分叉)
   - 从FrontendCalcCharacterizationTest提取,改public,8个FC测试搬迁后全绿验证一致

2. SwapDealService新增ValidateFrontendPnL只读校验:
   - 从unwindData.FlowEvents取浮动腿,PosiGrossPrice==0时跳过(避免误报)
   - 调FrontendCalcReference重算,与前端传值逐字段比对
   - 差异>0.01记Logger.Error(带输入快照便于排查)
   - 整体try/catch吞异常,校验自身错误绝不阻断交易
   - SwapUnwind/SwapIncome各插一处(FindTrade后、ExecuteInTransaction前)

不碰NLog配置(告警进Console,生产由运维采集)。SwapModule 157测试全绿。
2026-07-03 09:04:57 +08:00
hjhan 129e4bed0d test(swap): 补ApproveSwapTrade/ApplySwapTrade测试+3个seam(借鉴testable分支)
借鉴 origin/glms/feature/refactor-swap-event-testable 的 SwapUnwindScenarioTest 场景4/5,
补全当前分支缺失的平仓审批流程覆盖。

SwapDealService 新增3个 protected virtual seam:
- FindSwapEvent(查待审核事件)
- FindFlowEventsByEventId(查事件关联流水)
- CloseReCheckSetTrade(前置校验包装)
ApproveSwapTrade/ApplySwapTrade 重构为调seam,生产行为不变。

SwapDealSettlementTest 新增2个测试(SD_005/006,共6个):
- SD_005 ApproveSwapTrade 全平仓审核: 反序列化swap_event.EventData→资金流水→TradeStatus
- SD_006 ApplySwapTrade 提交审核: CloseReCheck前置校验+SwapRealizedPnL=SwapCloseAmount

融合策略: 保留当前分支SwapIncome资金流水断言独特价值(SD_001/002),
借鉴testable分支审批流程覆盖(SD_005/006),不二选一。
SwapModule 157测试全绿,无回归。
2026-07-03 08:30:36 +08:00
hjhan cf0d965ff8 test(swap): 前端计算逻辑特征化测试(8场景含用户可变输入)
用C#忠实重写前端JS公式作参考实现(FrontendCalcReference),冻结前端计算行为,
为后端校验/重算兜底提供金标准(注:前端保持快速反馈,不搬到后端)。

8个场景覆盖用户可变输入分支:
- FC_001-005 平仓页: 默认值/改标的价格/改平仓数量/改利息金额/非债券空头方向因子
- FC_006-008 结息页: 全量结算/改标的价格/含利息腿与预付金腿总额

参考实现内部用规范命名(EntryDirtyPrice/ExitDirtyFeePrice/floatRatio/longRatio),
践行《互换价格字段命名规范决策文档》,作命名规范活样板。
2026-07-03 08:22:55 +08:00
hjhan a207927f1b test(swap): SwapDealService抽7个virtual seam + 手动结算内存测试
攻克SwapIncome/SwapUnwind零单元测试覆盖的盲区(此前仅DBRecording,CI不跑)。

SwapDealService补7个protected virtual seam(参考已验证的SwapEodPositionService模式):
- FindTrade/AddClientCash/SaveSwapDeal(原private改protected virtual)
- SaveAllChanges/ExecuteInTransaction/CallSaveSwapTradeClientCash/TriggerRealtimeSwapPosition
生产实现行为不变,SwapIncome/SwapUnwind/ApproveSwapTrade重构为调seam。

新增SwapDealSettlementTest.cs(4个内存测试):
- SD_001 SwapIncome资金流水金额=-SwapRealizedPnL
- SD_002 含预付金返息双流水
- SD_003 SwapUnwind全平仓持仓归零+状态变更
- SD_004 DealFloatPosition含费价重算(后端唯二真做计算处)
红灯验证通过(改错金额符号测试立即失败)。
2026-07-03 08:22:43 +08:00
hjhan 782e1f6a7a refactor(swap): 债券价格÷100转换收敛到BondPriceConverter统一入口
消除9处价格转换字面量(*0.01m/*100),统一走BondPriceConverter.ToStorage/ToDisplay。
- 新增YLErpDAL/Helpers/BondPriceConverter.cs(含可空重载)
- 批次1(危险字面量): BondPaymentService/RealtimePnlCalc/RealTimeClientBanlanceService/SwapTradeAutoService
- 批次2-4(调用收敛): SwapFlowService/SwapFlowImportService/SwapEndConfirmService/EodPriceProvider/EodPriceQueryService
- RealtimePnlCalc:601/602价格×数量维度交织处加注释,不机械合并

不改bondPriceMultiple常量值,纯调用方式收敛。SwapModule 155测试全绿,行为不变。
2026-07-03 08:22:27 +08:00
锦麟 王 de0e7f791b BugFix 计算中都使用GrossPrice 2026-07-02 20:46:58 +08:00
wjl bfb69c2eae Bugfix 修改字段错误 2026-07-02 19:24:14 +08:00
wjl 6b2ec7c8c1 回退TradingAmountAvg的修改,后续全价(含费)或者全价(不含费)再梳理 2026-07-02 18:50:58 +08:00
hjhan ed80745bf2 字段命名建议 2026-07-02 18:09:27 +08:00