张名锐
|
64299aa744
|
cleanup: remove leftover risk engine references
|
2026-07-02 16:19:26 +08:00 |
|
张名锐
|
c94a717183
|
Revert "feat: 新增风控引擎RiskEngine模块(第一版骨架)"
This reverts commit 4140293b36.
|
2026-07-02 16:14:43 +08:00 |
|
张名锐
|
8cff296be3
|
Revert "feat: 风控引擎核心重构 - 表达式树编译 + Roslyn Scripting + 规则模型合并"
This reverts commit 3e357312c2.
|
2026-07-02 16:14:24 +08:00 |
|
张名锐
|
d5a4eab2ec
|
Revert "feat(风控引擎): RiskRuleService/RiskRuleController 权限控制及需求对齐"
This reverts commit a259b745ce.
|
2026-07-02 16:14:04 +08:00 |
|
张名锐
|
d01253a5da
|
Revert "feat: 规则双模式公式表达式(RuleExpr)& 字段精简重构"
This reverts commit 28ed20e527.
|
2026-07-02 16:13:41 +08:00 |
|
张名锐
|
4ac18c4810
|
Revert "feat(risk-engine): 完善风控规则种子数据与 CRUD 接口优化"
This reverts commit c2fc699e57.
|
2026-07-02 16:05:42 +08:00 |
|
张名锐
|
75dc6f182b
|
Revert "refactor(risk-engine): ConditionJson 改为 RuleCondition 数组格式,精简 DTO 命名"
This reverts commit 3bf90e25ef.
|
2026-07-02 16:05:40 +08:00 |
|
张名锐
|
d0e6b31d5c
|
Revert "优化调整规则管理"
This reverts commit e8ef5be862.
|
2026-07-02 16:05:38 +08:00 |
|
张名锐
|
dae112d199
|
Revert "fix(risk-engine): 修复多个风控引擎问题"
This reverts commit d7c09c793a.
|
2026-07-02 16:02:49 +08:00 |
|
张名锐
|
d1804710f3
|
Revert "优化字段类型"
This reverts commit 10b08f8f21.
|
2026-07-02 16:02:49 +08:00 |
|
张名锐
|
b2dce0e4f7
|
fix(swap): 修复互换交易流程事件数据填充问题
- 添加SwapTradeNo、EventType和EventReason字段到流程事件
- 修正EventType枚举类型从SwapEventTypeEnum改为SwapFlowEventTypeEnum
- 在SaveSwapDeal方法中添加交易信息验证逻辑
- 提取FillSwapFlowEvent方法统一处理流程事件数据填充
- 优化数据库保存操作确保数据一致性
|
2026-07-02 14:28:47 +08:00 |
|
张名锐
|
3534ebb342
|
fix(trade): 修正对客交易判断逻辑
- 修改了GuolianContractNoGenerator中对客交易的判断条件
- 将判断标准从"乙方=对客"改为"甲方=对客"
- 更新了相关注释以反映新的业务规则
|
2026-07-02 14:07:19 +08:00 |
|
锦麟 王
|
365711b5ff
|
自动互换分红时,期末结算全价使用PosiGrossPrice
|
2026-07-02 13:02:14 +08:00 |
|
hjhan
|
0910969e3f
|
fix(swap): PosiDividendSum精度差异修复(GLMS-20260105-0007)
问题:互换后PosiDividendSum=-89999.64(应为-90000),差0.36元。
根因:UpdateEodPosition cs:1635从头重算PosiDividendSum
(Round(全程,2)-已实现),与CopyEodPosition逐天递增
(每天Round(增量,2)累积)产生舍入误差累积。
修复:cs:1635改为递增模式
PosiDividendSum = eod.PosiDividendSum + TdPosiDividend - TdCloseDividend
与InterestIncomeSum的递增模式一致,避免从头重算的精度差异。
验证(golden录制/回放TDD):
- 真实数据录制GLMS-20260105-0007的eod快照+输入数据
- 回放重新调UpdateEodPosition:修复前=-89999.64(红灯),
修复后=-90000(绿灯,精确匹配)
- 121个测试全通过,无回归
|
2026-07-02 10:47:23 +08:00 |
|
hjhan
|
17005aa539
|
refactor(swap): ClearSwapPositions接缝-GetLegacyAutoSwapClientCashRecords可测化
SwapTradeBaseService加3个protected virtual虚方法:
- FindFlowEventsByEventIds: 查flow_event(原DbContext.swap_flow_event)
- FindManualClientCashIds: 查手动互换ClientCashId(原DbContext.swap_event)
- FindClientCashInCashOut: 查资金记录(原DbContext.ClientCashInCashOut)
GetLegacyAutoSwapClientCashRecords改为protected virtual,
内部3处DB查询替换为调虚方法。
这是78751f0a(重收盘误删资金修复)的核心逻辑:
GetLegacyAutoSwapClientCashRecords负责排除manualClientCashIds,
确保手动互换资金记录不被误删。
验证: 111个测试全通过。
|
2026-07-02 09:08:05 +08:00 |
|
hjhan
|
7c993f7bb2
|
refactor(swap): DealFloatPositions外部依赖虚方法接缝(分红场景准备)
加3个protected virtual虚方法:
- GetUnderlyingPrice: 标的市场价格(原UnderlyingCodePrice)
- GetUnderlyingData: 标的缓存数据(原DataCacheProvider)
- CalcBondPayment: 债券付息(原new BondPaymentService)
替换CopyEodPosition/UpdateEodPosition/SaveCurrentEodInitalPosi
内部的外部调用为调虚方法,生产代码行为不变。
这3个接缝使浮动腿归档的分红计算可测(TdPosiDividend/PosiDividendSum)。
验证: 108个测试全通过。
|
2026-07-02 08:57:55 +08:00 |
|
hjhan
|
4138a6ec36
|
refactor(swap): DealFloatPositions浮动腿归档方法可见性放开(testable迁移)
4个方法private→protected,不改变生产行为:
- DealFloatPositions(浮动腿归档主调度)
- CopyEodPosition(无平仓复制前日)
- UpdateEodPosition(有平仓更新)
- SaveCurrentEodInitalPosi(首日初始化)
这4个方法本身无直接DB调用(数据从参数传入),
但CopyEodPosition/UpdateEodPosition依赖外部数据源
(UnderlyingCodePrice/BondPaymentService/DataCacheProvider),
需后续加接缝才能完整测试。
SaveCurrentEodInitalPosi是纯计算可直接测。
验证: 104个测试全通过。
|
2026-07-02 08:47:30 +08:00 |
|
hjhan
|
7f0529bbed
|
test(swap): ComposePage流水合成持仓合成测试(testable迁移)
新增4个ComposePage场景测试(参考testable分支ComposePageScenarioTest):
- CP_001: 空事件→不创建持仓
- CP_002: 单条开仓→创建1条持仓,均价=开仓价
- CP_003: 两条开仓(同标的)→加权均价
- CP_004: 开仓+平仓→平仓扣减数量+产生资金记录
改动(SwapEodPositionService.cs):
- SaveEodPosition改为protected virtual(可override绕过UpdateSwapPosition连库)
- SaveEodPosition内部DbContext.Add替换为PersistEodSwapPosition
StubEodPositionService override 12个虚方法:
FindTrade/FindTradeExtend/FindEodSwapPositions/FindSwapPositions/
FindEodSwap/AddSwapEvent/AddClientCash/SaveEodSwapRecord/
ClearSwapPositionsForCompose/PersistEodSwapPosition/SaveAllChanges/
GetCurrencyRate + SaveEodPosition
验证: 100+4=104全通过(T0/T1=89+DealInterests=7+ConsumedInterest=4+ComposePage=4)。
|
2026-07-02 08:39:39 +08:00 |
|
hjhan
|
886a4d3ab1
|
refactor(swap): ComposePage补充接缝-AddClientCash/SaveEodSwapRecord/ClearSwapPositionsForCompose
ComposePage内部还有3处DB依赖需要接缝:
- AddClientCashInCashOut(cs:804平仓资金记录) → AddClientCash虚方法
- SaveEodSwap(cs:862框架合约汇总) → SaveEodSwapRecord虚方法
- ClearSwapPositions(cs:729清理旧事件) → ClearSwapPositionsForCompose虚方法
测试时override这3个虚方法可避免连库。
验证: 100个测试全通过。
|
2026-07-02 08:34:49 +08:00 |
|
hjhan
|
014edaed45
|
refactor(swap): ComposePage接缝-7虚方法+DB调用替换(testable迁移)
ComposePage(流水合成持仓)是swap_flow_event→swap_position的核心转换,
每笔开仓/平仓/互换都经过这里(176行)。
新增7个protected virtual虚方法(Seams):
- FindTrade/FindTradeExtend/FindSwapPositions
- FindEodSwapPositions/FindEodSwap
- AddSwapEvent/ExecuteInTransaction
ComposePage内部DB调用替换为调虚方法:
- DbContext.trade.Find → FindTrade
- DbContext.trade_extend.FirstOrDefault → FindTradeExtend
- DbContext.eod_swap_position.Where → FindEodSwapPositions
- DbContext.swap_position.Where → FindSwapPositions
- DbContext.eod_swap.FirstOrDefault → FindEodSwap
- new SwapEventService.AddSwapEventDate → AddSwapEvent
- DbContext.SaveChanges → SaveAllChanges(已有)
- ComposePage可见性private→protected
生产代码行为不变(虚方法默认实现=原逻辑)。
验证: 100个测试全通过(T0/T1=89+DealInterests=7+ConsumedInterest=4)。
|
2026-07-02 08:28:13 +08:00 |
|
hjhan
|
f501ee95a7
|
test(swap): 复利consumedInterest扣除合成测试(补c6adb3bb覆盖缺口)
c6adb3bb加的复利consumedInterest扣除此前无任何测试覆盖。
现在用4个合成测试完整验证:
改动(SwapDealService.cs):
- GetConsumedInterest加virtual关键字(测试可override注入内存值)
新增(ConsumedInterestScenarioTest.cs):
- StubSwapDealService override TryGetFloatRate+GetConsumedInterest
(模仿T0/T1的StubSwapDealService模式)
- CI_001: 基线(consumedInterest=0)拿到全程复利利息
- CI_002: 注入consumedInterest后利息=基线-consumed(直接验证cs:793)
- CI_003: 守恒(consumed+利息=基线)×3组不同consumed值
- CI_004: 全部已结(consumed=基线)平仓≈0不为负(防双重扣减)
关键发现:测试必须传settment:false走盘中平仓路径(CalcUnwindInterest),
settment:true(默认)走收盘归档路径(CalcEodInterest)不传consumedInterest。
验证: 89(T0/T1)+7(DealInterests)+4(ConsumedInterest)=100全通过。
|
2026-07-01 18:40:48 +08:00 |
|
hjhan
|
638803c497
|
refactor(swap): 阶段1c CalcSwapInterests虚方法接缝(testable迁移)
加1个protected virtual虚方法:
- CalcSwapInterests: 计算利息腿利息明细(原new SwapDealService(this).GetInterests)
参数与GetInterests完全一致,保证行为不变
将3个分支方法里的'new SwapDealService(this).GetInterests'替换为
调用CalcSwapInterests虚方法:
- SaveAutoEodInterestPosition(自动互换分支)
- SaveAutoEodWithCloseInterestPosition(平仓分支)
- SaveEodInterestPositionCopy(普通日分支)
测试子类override CalcSwapInterests,用StubSwapDealService
(已有89个测试验证)内存算利息,即可测全部4个分支。
验证: 93个测试全通过(T0/T1=89 + DealInterests=4),无回归。
|
2026-07-01 18:17:47 +08:00 |
|
hjhan
|
dc3a6e9f77
|
refactor(swap): 阶段1b SwapEodPositionService加虚方法接缝(testable迁移)
加3个protected virtual虚方法(Seams接缝),不改变生产行为:
- PersistEodSwapPosition: 持久化eod持仓(原DbContext.Add+UpdateDbOption)
- SaveAllChanges: 保存变更(原DbContext.SaveChanges)
- GetCurrencyRate: 获取汇率(原new EodCurrencyRateService)
将4个利息归档分支方法里的直接DB调用替换为调虚方法:
- SaveEodInterestPosition(互换分支)
- SaveAutoEodInterestPosition(自动互换分支)
- SaveAutoEodWithCloseInterestPosition(平仓分支)
- SaveEodInterestPositionCopy(普通计息分支)
测试子类override这些虚方法即可在内存中运行收盘逻辑,
不连数据库。生产代码行为完全不变(虚方法默认实现=原逻辑)。
验证: GetInterestsUnitTest_T0/T1 89个测试全通过,无回归。
|
2026-07-01 17:21:56 +08:00 |
|
hjhan
|
b548709371
|
Revert "fix(swap): 互换审核通过后到期日状态流转为已到期"
This reverts commit 83f44124c6.
|
2026-07-01 17:07:55 +08:00 |
|
hjhan
|
3e5a939689
|
refactor(swap): 阶段1a DealInterests利息归档方法可见性放开(testable迁移准备)
将5个利息腿归档相关方法从private改为protected,不改变生产行为:
- DealInterests(利息腿归档主调度)
- SaveEodInterestPosition(手动互换分支)
- SaveAutoEodInterestPosition(自动互换分支)
- SaveAutoEodWithCloseInterestPosition(平仓分支)
- SaveEodInterestPositionCopy(普通计息分支)
这是testable迁移第一步:先放开可见性让测试子类能调用,
后续阶段再加虚方法接缝(替换DB调用)和迁移合成测试。
参考: refactor-swap-event-testable分支 Seams模式改造
|
2026-07-01 16:47:26 +08:00 |
|
锦麟 王
|
fc90636ab4
|
当天利息端待实现逻辑修改为 = 上一天待实现 + 当天产生的利息 - flowEvents的利息
|
2026-07-01 15:20:24 +08:00 |
|
hjhan
|
47f95fcc45
|
fix(swap): 互换结清后eod待实现利息正确扣减(SaveEodInterestPosition)
SaveEodInterestPosition(cs:834)原公式:
InterestIncomeSum = pre + TdInterestIncome - TdCloseInterest
其中 TdInterestIncome = TdCloseInterest(互换日全程利息),
两者抵消导致 InterestIncomeSum=pre不变。
互换结清后待实现没归零,后续平仓默认值偏大。
修复:只改InterestIncomeSum公式为 pre - TdCloseInterest
(前日待实现 - 当日实现 = 剩余待实现)。
TdInterestIncome保持原值不动(入库字段,影响报表)。
验证需重新收盘:修复改的是eod生成逻辑,已有eod不会自动变。
|
2026-07-01 13:58:24 +08:00 |
|
hjhan
|
f7d23dc132
|
revert: 撤销单利consumedInterest扣除(双重扣减导致1天利息变0)
单利起点InterestProfitSum已含历史累计(eod快照),
再减consumedInterest会双重扣减。复利起点是0(从头算),
减consumedInterest正确。两者计算结构不同不能套用。
正确方向:让InterestProfitSum在互换结清后归零(eod层方案B),
而非在计算时减consumedInterest。待重新设计单利修复方案。
测试还原为红灯(Assert redCount>0),注释更新说明正确方向。
|
2026-07-01 13:38:24 +08:00 |
|
hjhan
|
83f44124c6
|
fix(swap): 互换审核通过后到期日状态流转为已到期
ApproveSwapTrade(cs:1558-1571)状态分支只判CloseMethod==全部平仓,
无ExerciseDate到期判断。互换CloseMethod默认0(Unknown)必走else→
TradeStatus退回确认成交→EodCheckMaturityTrade一直阻止收盘。
对比免审核路径SwapIncome(cs:1512)有正确的到期判断。
引入点083848fb(2025-05-28审核流程重构)。
改动(SwapDealService.cs cs:1579后):
在td.Notional=td.TradeAmount之后补到期判断(避免清零被覆盖):
if(eventType==互换 && ExerciseDate<=ValueDate)→已到期+清零Notional
副作用控制:
- 加eventType==互换条件→不影响平仓(eventType=2)审核
- 放cs:1579之后→Notional=0不被td.Notional=td.TradeAmount覆盖
- ExerciseDate<=ValueDate→非到期互换不进分支
验证: Step1坐实28/28互换事件走else分支, Step3验证3条到期互换→已到期✅
发现平仓部分平仓+到期也有类似问题(GL-20260420-0003),待业务确认处理方式
|
2026-07-01 13:02:43 +08:00 |
|
hjhan
|
1eb791381a
|
fix(swap): 单利路径扣除历史已结利息consumedInterest
复利路径已由c6adb3bb修复(加consumedInterest扣除),单利路径
CalcDailySimpleInterest未同步。互换结清后再平仓默认值偏大。
改动(SwapDealService.cs 3处):
- cs:437 去掉InterestType==复利条件,单利也取GetConsumedInterest
- cs:707 单利调用传入consumedInterest参数
- cs:802/856 CalcDailySimpleInterest签名加consumedInterest+末尾扣除
验证(Step1_SimpleInterestRedTest): 1813单利样本
34203偏大量8271→0✅, 34204预付金偏大量58→0✅(修正测试口径漏乘ratio)
复利回归(1889): 6-30默认值仍6.44✅无退化
|
2026-07-01 13:02:15 +08:00 |
|
锦麟 王
|
c6adb3bb8a
|
BugFix 复利计算的没有扣除手动互换长生的利息端费用
|
2026-07-01 10:34:58 +08:00 |
|
张名锐
|
78751f0a57
|
feat(swap): 完善自动互换资金记录管理功能
- 在SwapEodPositionService中添加clientCashIds列表追踪多笔资金记录
- 为UnwindData类新增ClientCashIds属性存储自动互换生成的资金记录ID集合
- 在SwapTradeBaseService中实现GetAutoSwapClientCashIds方法解析历史数据
- 添加GetLegacyAutoSwapClientCashRecords方法处理遗留资金记录删除逻辑
- 实现IsLegacyAutoSwapClientCashRecord方法精确匹配待删除资金记录
- 优化资金记录删除策略区分自动互换与手动操作产生的记录
|
2026-07-01 09:53:44 +08:00 |
|
张名锐
|
adb5473732
|
Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2
|
2026-06-30 11:23:21 +08:00 |
|
lisong
|
e7fa48d82e
|
Merge remote-tracking branch 'dest/glms/feature/1.4.2' into feature/p132_74-risk-engine
|
2026-06-30 09:59:31 +08:00 |
|
尹峰
|
10b08f8f21
|
优化字段类型
|
2026-06-29 18:34:46 +08:00 |
|
尹峰
|
94da9748a2
|
Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine
|
2026-06-29 18:10:13 +08:00 |
|
尹峰
|
d7c09c793a
|
fix(risk-engine): 修复多个风控引擎问题
- ScopeIsGlobal 类型由 bool 改为 int 以兼容前端传输 0/1
- 修复 QueryApplicationList 中 Status 投影 EF Core enum 转换失败
- 新增 Scope 字段查询支持(逗号分隔集合精确匹配)
- 新增变量列表 DataType 筛选
- 修复审计日志日期查询范围(EndDate 纳入整天数据)
- 统一 Application 审计日志 OperationType 前缀(APP_xxx)
- 审计日志 OperationDetail 枚举值映射为中文
|
2026-06-29 18:09:19 +08:00 |
|
ruisu
|
cc18bdafda
|
Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine
|
2026-06-29 17:30:14 +08:00 |
|
ruisu
|
9777698a9a
|
feat:修改互换交易样式以支持展示新风控内容,将rule与application加载前移到系统启动时
|
2026-06-29 17:29:36 +08:00 |
|
张名锐
|
1f584302e6
|
Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2
|
2026-06-29 16:51:50 +08:00 |
|
锦麟 王
|
cf2f8b6e9f
|
SwapCloseAmount分红重复计算
|
2026-06-29 16:39:02 +08:00 |
|
锦麟 王
|
1c45a54395
|
BugFix SwapCloseAmount计算位置太前,导致资金算了两遍
|
2026-06-29 16:38:34 +08:00 |
|
张名锐
|
c76c3aa218
|
fix(trade): 修复合同编号生成和追保区间计算逻辑
- 在合同编号前缀中添加FICC标识符
- 修复银行账户信息中支付系统号字段的赋值逻辑
- 修正追保区间计算公式,使用正确的差值参数替代维持保证金百分比
- 更新追保区间上下限的计算逻辑以确保正确的风险控制范围
|
2026-06-29 16:26:17 +08:00 |
|
锦麟 王
|
1e4ab52c1e
|
平仓总额计算规则调整
|
2026-06-29 15:54:07 +08:00 |
|
尹峰
|
04c01f2f47
|
Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine
|
2026-06-26 17:15:29 +08:00 |
|
尹峰
|
e8ef5be862
|
优化调整规则管理
|
2026-06-26 17:14:53 +08:00 |
|
ruisu
|
0c2a4b3afb
|
feat:打通前后端链路。老风控新风控映射:禁止=》Error,需审批=》RiskWarning(新状态,需二次确认,并记录日志),提示、通过=》Success(提示增加TIpMessage)
|
2026-06-26 17:01:21 +08:00 |
|
锦麟 王
|
d9fc5965d3
|
BugFix 系统中MarkCloseValue歧义部分修改
|
2026-06-26 16:06:13 +08:00 |
|
锦麟 王
|
ab70531f17
|
MarkClosePnl 不要重复计算分红
|
2026-06-26 11:03:22 +08:00 |
|
锦麟 王
|
dd305444dd
|
自动分红的不要清除掉当日分红
|
2026-06-26 09:49:34 +08:00 |
|