苏睿
|
6c547a0d13
|
!27 增加vega(1bp)希腊值
Merge pull request !27 from feature/p132_155-yf-vega-1bp
|
2026-08-21 07:40:04 +00:00 |
|
苏睿
|
e867e702b5
|
!28 登录界面美化
Merge pull request !28 from feature/p132_154-yf-new-sso-login
|
2026-08-21 07:39:39 +00:00 |
|
尹峰
|
b8d8ed151e
|
优化页面缓存
|
2026-08-20 17:30:45 +08:00 |
|
尹峰
|
775ee93a24
|
Merge branch 'master' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_154-yf-new-sso-login
|
2026-08-20 17:02:58 +08:00 |
|
尹峰
|
4c1ac60ed7
|
fix style 属性内嵌未转义双引号
|
2026-08-20 17:02:41 +08:00 |
|
lisong
|
b26343408a
|
Merge branch 'glms/feature/1.4.2' of http://git.yiliantech.com/gitlab/otc-dev/zszq-trs into glms/feature/1.4.2
|
2026-08-20 15:55:43 +08:00 |
|
hjhan
|
8d7bc1b457
|
feat(web): EQD-6977 簿记页是否罚息开关(ExtendObj 直绑,保存经既有 JSON.stringify 自动落 ExtendJson)
|
2026-08-20 15:53:13 +08:00 |
|
hjhan
|
4f1b55b843
|
feat(web): EQD-6977 平仓页是否罚息下拉(改选即重取利息含罚息) + 其他费用改标签其他费用含罚息 + 预览参数透传(提交经 UnwindData 随 deal 自动回传)
|
2026-08-20 15:53:13 +08:00 |
|
hjhan
|
5552402a7c
|
feat(swap): EQD-6977 罚息开关簿记默认值管道——TradeExtendJson.IsPenaltyInterest(存量缺省false零回填) + InitUnwind 平仓页带出簿记值 + GetUnwindInterestList 参数透传
|
2026-08-20 15:53:11 +08:00 |
|
hjhan
|
d6646f9c90
|
fix(swap): EQD-6977 重置日当天平仓承接①修正——快照基数还是上一段的,须改取 InterestIncomeSum(昨日全部待实现于今日并入);新增边界矩阵测试:重置日当天(算尾/不算尾)/重置日前一日/到期日=重置日/锚点偏离(延期腿)/起息日当天,恒等式 22/22 全绿
|
2026-08-20 15:46:57 +08:00 |
|
尹峰
|
400a0b4612
|
!26 Merge branch 'glms/feature/1.4.2_0808' of http://git.yiliantech.com/gitlab/otc-dev/zszq-trs into glms/feature/1.4.2_0808
Merge pull request !26 from glms/feature/1.4.2
|
2026-08-20 07:37:04 +00:00 |
|
hjhan
|
ffffe842c6
|
fix(swap): EQD-6977 罚息精确续接落地——承接量改用实际计息状态(preEod基数+事件实结,弃冻结重放)、锚点统一PosiStartDate、罚息并入既有利息流InterestFee(去独立事件/去is_penalty_interest列及DDL/回退closeList与EOD两处守护)、接缝加eventType==平仓守卫、trace逐腿全程落盘、新增多区间不同定盘恒等式测试(旧冻结重放实现必挂)
|
2026-08-20 15:11:33 +08:00 |
|
尹峰
|
5ee510aa35
|
增加vega(1bp)希腊值
|
2026-08-20 14:15:12 +08:00 |
|
hjhan
|
09660fffea
|
test(swap): EQD-6977 同步金标准测试——删除CalcPenalty valueDate具名实参
|
2026-08-20 13:37:26 +08:00 |
|
hjhan
|
48ae429fb8
|
refactor(swap): EQD-6977 消除罚息接缝代码臭味道——CalcPenalty 去掉冗余valueDate参数、ComputeCarryBreakdown 去掉未使用position、GetIntradayUnwindInterests 内联块抽为私有AppendPenaltyInterests
|
2026-08-20 13:37:24 +08:00 |
|
hjhan
|
bb8130698f
|
test(swap): EQD-6977 罚息接缝 headless 单测——固定/浮动腿追加 IsPenaltyInterest 标记 + 承接恒等式(全期=已结+罚息)
|
2026-08-20 13:23:12 +08:00 |
|
hjhan
|
35a84cd60d
|
feat(swap): EQD-6977 罚息计息接缝——GetIntradayUnwindInterests 按 IsPenaltyInterest 在 GetInterests 返回后追加同构罚息流
|
2026-08-20 13:23:10 +08:00 |
|
hjhan
|
10a12b7eef
|
fix(swap): EQD-6977 EOD 手动结息守护排除罚息
SaveAutoEodWithCloseInterestPosition 的 manualSettledInterestAmount 求和加 Where(IsPenaltyInterest!=1),防 auto-swap 重算相减时丢失罚息(评审8.1双守护之防御层)。
|
2026-08-20 12:59:13 +08:00 |
|
hjhan
|
3777022bac
|
fix(swap): EQD-6977 closeList 排除罚息事件
GetUnwindInterests 的 closeList 查询加 IsPenaltyInterest!=1 过滤,使已落库罚息事件不进去重基数,避免当日二次部分平仓时正常利息被错误抵扣。DDL(stage1 Ver-5.7.0)须随发布。
|
2026-08-20 12:59:12 +08:00 |
|
hjhan
|
99ca8ebf2c
|
refactor(swap): EQD-6977 罚息标志管道——UnwindData/InterestCalcRequest/GetUnwindInterests 透传 isPenaltyInterest
新增 UnwindData.IsPenaltyInterest(bool);InterestCalcRequest 加 IsPenaltyInterest 字段+私有ctor参数+IntradayUnwind 工厂可选参(default false);GetUnwindInterests 加 isPenaltyInterest 可选参并透传 IntradayUnwind。零行为变化,现有调用方经默认值不受影响,Penalty 套件 11/11 通过。
|
2026-08-20 12:57:29 +08:00 |
|
hjhan
|
11459ed73f
|
feat(swap): EQD-6977 swap_flow_event 增加 is_penalty_interest 列
模型属性 IsPenaltyInterest + Column(is_penalty_interest) 显式映射;增量 DDL 落 DbUpdate/Ver-5.7.0/prod.sql。存量 DEFAULT 0 自动为否。列命名 snake_case 与全表 PascalCase 不一致,评审文档已标注待拍板。
|
2026-08-20 12:31:43 +08:00 |
|
hjhan
|
f712dfc98f
|
refactor(swap): EQD-6977 拆分 CalcPenalty 计息分支提升可读性
将 CalcPenalty 内复利/单利两个 if/else 大块抽为 AccrueCompound/AccrueSimple 私有方法(返回 (accrued, finalBasis)),主体只表达分派+组装事件。签名与行为零变化,Penalty 套件 11/11 通过。
|
2026-08-20 12:31:41 +08:00 |
|
hjhan
|
ed86402aba
|
test(swap): EQD-6977 罚息契约钉死——金标准恒等式(全期=已结+罚息,含不算尾/中段平仓双承接量) + 边界四象限 + 部分平仓 + 冻结取率规则
|
2026-08-20 11:51:25 +08:00 |
|
hjhan
|
6a32181ef7
|
feat(swap): EQD-6977 新增 Penalty 罚息模块——冻结利率解析 + 罚息窗口计息器(复用 Accrual 纯函数,产出同构罚息利息流)
|
2026-08-20 11:51:24 +08:00 |
|
hjhan
|
d1985231ee
|
feat(swap): EQD-6977 复利纯函数支持 carryInInterest——窗口前已结利息随首个重置日资本化并持续留在基数(与全窗口重放轨迹严格一致);默认0零行为变化,含数学不变量测试
|
2026-08-20 11:43:27 +08:00 |
|
hjhan
|
952295a78a
|
fix(fr007): 界面手工录入定盘精度 4→6 位——1.4150% 不再被截成 1.4200%
UAT 实测发现(EQD-6968 测试期间):录入 1.4150 落库变 0.0142。两层拆解:
- ÷100 为设计(界面按百分数录入,SwapflowList.js toNumber(value/100,6) 已传 6 位)
- Math.Round(price,4) 为精度截断:FR007 官方发布百分数下 4 位=小数 6 位,
4 位舍入只保百分数下 2 位,丢 0.5bp(1 亿本金 7 天约 96 元)
修复:抽 RoundFr007Price(6位) 替换三处 Round(,4),与前端 6 位对齐;
DB 列 double(18,10) 已验证容纳;bond-sync 自动同步链(BigDecimal 全精度透传)
不经此路径零影响。已截断的历史行(如 2026-08-19 的 0.0142)不自愈,需重录。
附带修复 GLMS20260819Fr007TradeDiscoveryTest 编译错误:@"" 逐字字符串内
应用 "" 转义、UnderlyingCode→FutureContractId(实际列名)、EF6 Database.Connection
→ EF Core GetDbConnection()。
验证:SwapFlowFr007EntryPrecisionTest 2/2;全量 985 例 145 败与基线 diff=0
|
2026-08-19 14:29:16 +08:00 |
|
尹峰
|
23a0c89531
|
登录界面美化
|
2026-08-19 13:42:47 +08:00 |
|
hjhan
|
43fb83ed00
|
refactor(swap): relaxedFixingFromDate 改名 exclusionStart——名实归位
该参数诞生于"有价则取/缺价回退"口径(55363e9f 由 exclusionEndDate 改名而来),
自洽化(fafae5ca)后排除日一概不取价,"放宽取价"语义已不存在——名字回到
排除区间本义,并与 FIX 日志既有用词"排除起点"对齐:
- BuildSegmentRates/CalcDailyCompoundInterest/CalcDailySimpleInterest 三签名
+ 全平重放传参点 + 方法摘要补 exclusionStart 参数语义文档
零行为变更。
验证:内存套件 113/113;全量 981 例 145 败与基线 diff=0
|
2026-08-19 11:41:18 +08:00 |
|
hjhan
|
f8049f81f8
|
refactor(swap): InitInterestDate 删除死子句 td.StartDate>interestStart + 触发场景注释归因修正
分析定谳:interestStart 经三条赋值路径(=开始日/不算头+1天/preSettleDate 且仅当
≥interestStart 才覆盖)恒 ≥ td.StartDate,第二 OR 子句恒 false——死代码删除。
注释归因同时修正两侧旧错误:
- 原注释把"不算头首日"笼统挂在返回 true 上——实际由第一子句
interestStart>interestEnd 兜住(StartDate+1>StartDate);
- 候选修正案"观察日当日已结息(preSettleDate 覆盖窗口末)"亦不精确——日期相等
时函数返回 false,当日已结息的利息归零在 GetInterests closeList 净额层;
只有相等叠加到期日不算尾回拨(endDate-1)才严格大于而触发。
新增三条 InitInterestDate 直测钉边界:不算头首日空窗/同日已结息日期相等非空/
同日已结息+到期日回拨空窗。
验证:GLMS20260817Fr007UnwindMorningTest 36/36;全量 981 例 145 败与基线 diff=0
|
2026-08-19 11:36:53 +08:00 |
|
hjhan
|
7b70030216
|
test(swap): 补快照利率携带契约——单利+不算头+有preEod 盲区定谳
该组合此前零覆盖。定谳结论:带 preEod 时 fetchAfter=preEod.ValueDate +
seed=preEod.FloatRate 是设计分工(≤上一日终的重置日沿用快照携带利率,>的重新
取价),与无日终场景的根本区别是种子有正确来源——开始日EOD因窗口为空走正常
取价,快照 FloatRate=开始日定盘(链条起点),并非旧 bug 复发。
- CarryForward_Simple_NoHead_PreEodAtStartCarriesFirstPeriodRate:
preEod{ValueDate=开始日, FloatRate=开始日定盘} → PricedDates=0(不重复取价)、
事件利率=快照利率、金额=上日待实现+3天×(spread+快照利率) 精确断言
- Eod_NoHead_StartDay_SnapshotRateCarriesFirstFixing:开始日EOD("00",窗口
为空)→快照利率=首重置日定盘,钉死携带链条起点
Run 扩展:Outcome 暴露 Svc(取价审计) + BuildPreEod 支持指定利率。
验证:GLMS20260817Fr007UnwindMorningTest 33/33;全量 978 例 145 败与基线 diff=0
|
2026-08-19 11:31:19 +08:00 |
|
hjhan
|
decbd83d0b
|
refactor(swap): 误导布尔 swap 改名 interestWindowEmpty——按"计息窗口为空"本质命名
InitInterestDate 返回 true 的语义是"计息窗口为空→不计利息"(利率与金额归零),
判定只看日期窗口(interestStart>interestEnd)、与事件类型无关;旧名 swap 把
典型原因(互换当日已结息)当成了效果的名字,读者会误读为事件类型判断。
- SwapDealService: GetInterests 局部变量 + GetFloatRate/CalcUnwindInterest/
InitSwapDealInterest/CalcMarginInterest 四个签名参数及分支/日志/注释同步
- SwapTradeBaseService.InitInterestDate 返回值语义补入 XML 文档
- MarginInterestGoldenReplay/Shadow 测试命名参数同步
零行为变更。
验证:相关套件 51/51;全量 978 例 145 败与基线 diff=0
|
2026-08-19 11:31:03 +08:00 |
|
hjhan
|
6e2cae7c1f
|
test(swap): EQD-6968 自洽化契约钉死——事件利率确定性+快照再定盘载体+CI_007/008 新口径
- Determinism_NoTail_EventFloatRateIndependentOfPublishTime:尾日价缺(上午) vs
有(下午)两世界,金额与事件 FloatRate 完全一致(=末段已消费利率0.01425)
- CloseOnly_平仓日为重置日_剩余持仓快照再定盘(+非重置日反例):经 DealInterests
真路由断言快照 FloatRate=当日新定盘(RefixCalls 计数)——载体职责显式化验收
- CalcFirst 用例去掉 closeRate 免疫 hack:priorValueDate 根治后首重置日恒取价
- CI_007 更名+断言翻转:平仓日=重置日+不算尾 → 事件利率=末段已消费利率(旧);
原断言(取新定盘)正是被替换的旧口径契约,根因注释留痕 GLMS-JIATT-20260805
- CI_008:本金结转断言保留,利率断言改为末段旧利率
验证:ConsumedInterestScenario 9/9、InterestEodTailSnapshot+Fr007 36/36、
全量 976 例 145 败与基线 diff=0
|
2026-08-19 11:07:10 +08:00 |
|
hjhan
|
fafae5cac0
|
refactor(swap): EQD-6968 取价口径自洽化——排除日纯跳过+持仓延续重置日显式再定盘
取价规则只由交易属性决定(算不算尾/interest_rule/重置日历),平仓只切窗口:
① BuildSegmentRates 排除日(不算尾尾日)一概不取价(有价也不取)——事件利率恒为
末段已消费利率,与金额同源、与平仓时刻无关(旧口径下午平仓落库新利率,金额
却用旧利率,且上午/下午记录不同);金额零变更(排除日本就零消费)。
② GetFloatRate 不算尾重置日不再先试取尾日定盘(原'有价则取'分支删除)。
③ 剩余持仓的新周期利率改由 SwapEodPositionService 显式获取:平仓日恰为重置日
且剩余>0 时,快照 FloatRate 经 ResolveOngoingResetFixing 再定盘为当日新定盘
(生产 GetFixingOrThrow,缺价抛——与 ByEod 重置日/EodCheckSettlePrice 同口径;
原'有价则取'顺带承担此载体职责,现显式分离)。全平/算尾/观察日无需再定盘。
④ 无日终快照播种 priorValueDate 恒=开始日-1:首重置日(=开始日)的定盘覆盖
[开始日,下一重置日)全部计息日(不算头时 7/7 起仍属首段),必须落在取价窗内。
原仅算头回拨一天,不算头时首段误用种子利率(靠②的尾日取价回填掩盖,现已根治)。
'不算头少计一天'仍由计息边界 IncludeStart=false 承担,天数不变、利率归位。
FIX 日志同步:排除日不取价/EodCloseRefix 再定盘 全程可审计。
验证:全量 976 例 145 败与改动前基线失败名单 diff=0;内存套件(含
ContractReferenceOracle 金标准/InterestEodTailSnapshot)全绿
|
2026-08-19 11:06:52 +08:00 |
|
hjhan
|
e779347488
|
test(swap): EQD-6968 补到期日当天全平补计分支——replayEndDate+1 的尾日取价豁免
relaxedFixingFromDate 的存在理由回归钉死:不算尾时 InitInterestDate 回拨
endDate 一天,最终全平的历史差分重放需补回真实平仓日(replayEndDate=endDate+1),
该边界日定盘经 relaxedFixingFromDate 走"有价则取/缺价跳过"——
否则到期日上午全平被尾日价误拦(EQD-6968 在到期日当天的镜像场景)。
- FinalClose_OnMaturityDay_NoTail_...Succeeds:不算尾+到期日缺价 → 放行
- Guard_FinalClose_OnMaturityDay_Tail_...StillThrows:算尾+到期日缺价 → 仍拦
注:全平重放分支 relaxedFixingFromDate 恒非 null(Red_Compound_FullClose_WithPreEod
已覆盖),本提交补的是 endDate<valueDate 时的 +1 补计子分支。
验证:GLMS20260817Fr007UnwindMorningTest 30/30 内存全绿
|
2026-08-19 10:53:34 +08:00 |
|
hjhan
|
bf2adf0fae
|
test(swap): EQD-6968 补 EOD 收盘归档取价链——此前 settment=true 零覆盖
EOD 不取尾日价靠两道闸:InitInterestDate 到期日回拨(endDate=D-1) +
CalcEodInterest calcToday=false(到期日且不算尾)跳过 ByEod 重算——ByEod 的
isResetDay→ResolveFloatRate 不看 calcLast,任一环回归即到期日收盘重新索要尾日价。
- Eod_NoTail_MaturityDayFr007Missing_Succeeds:不算尾+到期日(重置日)缺价 → 放行
- Eod_Tail_MaturityDayFr007Missing_StillThrows:算尾+到期日缺价 → 仍拦
- Eod_MidTradeResetDayFr007Missing_StillThrows:非到期重置日缺价 → 仍拦
(盘中重置日新利率被持续持仓消费,ByEod 取价链是真实依赖,不算尾也不豁免)
验证:GLMS20260817Fr007UnwindMorningTest 28/28 内存全绿
|
2026-08-19 10:53:34 +08:00 |
|
hjhan
|
4d68133dcb
|
test(swap): EQD-6968 补不算头不算尾(00)组合——CalcFirst=false 零覆盖盲区
- Red_Compound_NoHeadNoTail:00+缺平仓日价 → 放行(calcLast 同 false,与 10 同口径)
- CalcFirst_Simple_NoHeadDropsExactlyStartDayInterest:单利下 00 与 10 利息差
恰好=开始日一天利息(精确断言,钉 CalcFirst 回归)。closeRate 取 7/6 定盘同值,
免疫既有取价细节——排查中发现:无日终快照+00 时 fetchAfter=interestStart-1 会
跳过开始日取价、首段利率用种子(GetFloatRate 回写的尾日定盘),与 10 的
fetchAfter=开始日-1 不同(FIX 日志可复现,niche 场景:首个日终前平仓)。
Run 运行器扩参:settment / exerciseDate(供后续 EOD 与到期日用例)。
验证:GLMS20260817Fr007UnwindMorningTest 25/25 内存全绿
|
2026-08-19 10:53:34 +08:00 |
|
tengyufan
|
8701bd8c44
|
fix(ClientBlack): 修正黑名单删除结果提示
- 根据本次实际进入删除审批的记录数返回删除结果
- 未提交、新增已拒绝直接删除时提示“删除成功”
- 已生效记录进入删除审批时提示“已经提交删除审批”
- 批量混合删除时提示部分记录已提交删除审批
|
2026-08-19 10:16:51 +08:00 |
|
tengyufan
|
87a8b90eaf
|
fix(ClientBlack): 支持删除未生效黑名单记录
- 未提交、新增已拒绝的黑名单记录可直接删除,不进入删除审批
- 已加入、删除已拒绝仍按原逻辑发起删除审批
- 新增审批中、删除审批中仍禁止删除
- 补充未生效状态可直接删除的状态机单测,45/45 通过
|
2026-08-19 10:07:39 +08:00 |
|
hjhan
|
54c4bf21c6
|
test(swap): PrevBizDay 用例对进程内 QDP 日历状态脱敏(修全量运行偶发红)
全量运行实测:其他用例会把 QDP "chn" 日历替换为"全营业日"退化态
(GetNonHolidayDefore(7/19)=7/19 不再回拨周五),三个 PrevBizDay 放行用例
单跑绿、全量红(取价日 7/19 不在市场)。生产库恒有真实日历无此问题。
- Fr007MarketPrevBizDay 同时供回拨日(7/3、7/10、7/17)与退化日(7/5、7/12、7/19)
两套价——被测对象是取价放宽语义,不是日历本身;
- FixingDayMissing 守卫同时扣 7/17+7/19,两种日历态下都缺价仍拦。
验证:套件 23/23;全量 960 例 145 败与改动前基线失败名单 diff=0,11 个新用例全绿
|
2026-08-19 09:44:59 +08:00 |
|
hjhan
|
1e6abb4547
|
refactor(swap): 重置日判定收口 IsResetDay 私有谓词(零行为变更)
EQD-6968 三判定之一的"是否重置日"公式原在 GetFloatRate(days%period) 与
CalcUnwindInterest 当日归周期判定(daysFromStart%rest_days) 各写一遍,
收口为单一谓词;锚点差异(td.StartDate vs position.PosiStartDate,
非初始持仓两锚点可能不同)在注释中显式注记,只收口公式不统一锚点——
统一锚点属行为变更需业务定调。
验证:内存套件 102/102 全绿
|
2026-08-19 09:33:15 +08:00 |
|
hjhan
|
0418d9f3d3
|
refactor(swap): InterestCalcMode 算头算尾解析收口至 TradeExtendJson.CalcFirst/CalcLast
三处重复的 StartsWith/EndsWith 字符串解析(GetInterests / InitInterestDate /
SwapEodPositionService EOD平仓后结息)收口为 TradeExtendJson 计算属性:
- [JsonIgnore] 保证 ExtendJson 序列化字节不变;
- InitInterestDate 原写法在 InterestCalcMode 为显式 null 时会 NRE,
收口后与其他两处 null-安全语义对齐(缺省=算头算尾,实际不可达,属性缺省 11)。
EQD-6968 三判定之一的"算不算尾"至此单点可查。
验证:内存套件 102/102 全绿(GLMS20260817Fr007 23 + Cache 7 + CloseInterest/
InterestScenario/TailSnapshot/EntrySemantics 72)
|
2026-08-19 09:31:38 +08:00 |
|
hjhan
|
7cfa85a7cc
|
test(swap): EQD-6968 补前一营业日基准组合+算尾非重置日放行(方案一场景2/3落格)
- PrevBizDay_TailCalced×2:算尾(11)+rule=-1+当日(7/20)未发布 → 放行(取价日回拨至7/17已发布)
- PrevBizDay_NoTail:不算尾(10)+rule=-1+当日未发布 → 放行
- PrevBizDay_FixingDayMissing:rule=-1 但取价日(7/17)本身缺价 → 仍拦(真实依赖守卫)
- TailCalced_NonResetDay×2:算尾(11)+当日非重置日(7/22)+当日缺价 → 放行(非重置日不取当日价)
新增 Fr007MarketPrevBizDay 市场:重置日7/6、7/13、7/20 回拨取价日7/3、7/10、7/17
验证:GLMS20260817Fr007UnwindMorningTest 23/23 内存全绿
|
2026-08-19 09:28:27 +08:00 |
|
hjhan
|
f069c38d48
|
test(swap): EQD-6968 补算尾依赖守卫——重置日缺价仍拦+newCalcLast覆盖算尾仍拦
防'不算尾放宽'误扩到依赖场景(方案一场景4):
- Guard_TailCalced×2:算尾(11)+当日重置日+当日缺价 → 必须仍抛(复利/单利)
- Baseline_TailCalced:算尾+当日有价 → 成功(对照)
- Guard_NewCalcLast:交易10不算尾但本次平仓指定算尾 → effectiveCalcLast=true 仍拦
- Baseline_NewCalcLast:指定算尾+有价 → 成功
Run 运行器扩参:calcMode/interestRule/newCalcLast/market(本提交仅用 calcMode/newCalcLast)
验证:GLMS20260817Fr007UnwindMorningTest 17/17 内存全绿
|
2026-08-19 09:26:30 +08:00 |
|
hjhan
|
e94c8c25e2
|
Merge branch 'glms/feature/1.4.2' of http://git.yiliantech.com/gitlab/otc-dev/zszq-trs into glms/feature/1.4.2
|
2026-08-18 20:17:16 +08:00 |
|
tengyufan
|
274a93b328
|
更改黑名单审批导入格式为.xlsx
|
2026-08-18 16:56:29 +08:00 |
|
hjhan
|
90d1d85b4a
|
test(infra): DbDiagnose 用例库不可达自守卫——真探测一次+进程级缓存结论
原守卫 try 挂在 GetYLDbContext() 上永远打不中(EF context 构造不连库,
Connect Timeout 发生在首个查询),无库裸跑 14 个用例逐个假红且各耗 15s。
改为 DbDiagnoseGuard.RequireTestDb():CanConnect 真探测一次并缓存,
不可达全批 Inconclusive——裸跑不再有假失败噪音,探测成本 14×15s→1×15s。
连上库的机器行为不变(照常真跑)。
|
2026-08-18 09:58:16 +08:00 |
|
hjhan
|
7a5089555d
|
fix(fr007-cache): 直查命中失效快照+去冗余排序+重载失败保旧快照防重试风暴
- EodPriceQueryService.TryGetPrice: FR007 快照 miss 直查库命中后 Invalidate,
下次访问整表重载回 O(1),否则该键 TTL 窗口内每次读取都退化为点查
- 移除点查多余的 OrderByDescending(主键等值查询取首行即可)
- Fr007FixingCache.EnsureFresh: 重载失败(DB抖动)保留旧快照不抛并重置TTL时钟
——历史定盘不可变旧值依旧正确,同时防重试风暴;版本失效路径不受TTL掩盖
- 补两测试: 重载失败保快照窗口内不重试 / 首次装载失败miss不抛窗口内不重试
|
2026-08-18 09:33:28 +08:00 |
|
hjhan
|
e219bdae18
|
feat(swap): FR007定盘整表快照缓存——预载全历史O(1)命中,miss不缓存,写侧失效+1min TTL兜底
数据形态:每工作日一行、发布后不变、全历史仅数千行 → 整表快照优于逐键缓存。
① Fr007FixingCache:首次访问批量SELECT全历史进字典,此后读取O(1)零查询;
快照以引用替换发布(Volatile),读侧无撕裂,重载加锁去抖;
② 负缓存防线:miss(当日~11:15未发布/补录历史)永不进快照,TryGetPrice 回退直查库——
否则发布后TTL窗口内仍查不到,上午平仓会一直用回退利率;
③ 写侧版本失效:SwapFlowService 新增/修改/删除 FR007 后 Invalidate,下次访问立即
整表重载不等TTL;其余通用写入口(导入/复制/合成/直改库)靠TTL兜底,可见性≤1分钟;
④ TryGetPrice 仅 FR007 走缓存路由(全仓生产调用方仅 SwapDealService.TryGetFloatRate
与 Fr007IndexFixer 两处,均定盘链),其他标的照旧直查,零影响;
⑤ YLErpDAL 增加 InternalsVisibleTo("UnitTestProject"),时钟/装载器测试接缝保持 internal。
验证:Fr007FixingCacheTest 5/5(预载命中/miss不缓存/写侧立即生效/TTL过期重载/稳态零重载);
GLMS20260817Fr007UnwindMorningTest 等内存套件 55/55 全绿。
|
2026-08-18 08:24:21 +08:00 |
|
hjhan
|
a97476c4da
|
EQD-6968: 不算尾缺价改沿用已有利率(删期初回退) + 取价决策FIX常驻日志
① GetFloatRate 不算尾缺价不再回退取期初定盘,改沿用已有利率
(preEod.FloatRate/position.FloatRate)——其返回值仅作 preEod.id==0 的种子
且会被分段首段强制取价覆盖,期初取价是无消费者的多余DB读且语义误导;
② BuildSegmentRates 等价重排为 if/else-if 结构,注释改"跳过取价/沿用"准确措辞
(行为不变:排除日有价仍取新利率,缺价沿用上一重置日利率);
③ 防历史bug"取错重置日利率"复发:GetFloatRate/ResolveFloatRate/BuildSegmentRates
三处取价决策经 SwapCalcTrace.Critical 常驻 Info 落盘——重置日判定、取价日
(interest_rule回拨)、命中/缺失、不算尾缺价沿用来源、排除日跳过全程可审计;
④ 测试真内存化:Stub 补 GetConsumedInterest=>0 override(复利路径原偷连96库,
与类注释"内存,不连库"矛盾);一致性断言措辞对齐新语义;
⑤ 修复 SwapDealService.cs 文件头双 BOM 损坏。
验证:GLMS20260817Fr007UnwindMorningTest 12/12 内存全绿;
邻近套件 67过/15败与改动前基线完全一致(15败均为沙箱无96库 Connect Timeout)。
|
2026-08-18 08:10:30 +08:00 |
|
 hjhanandClaude Opus 4.7
|
cb5ba86d85
|
EQD-6968: 不算尾缺价改沿用已有利率(删期初回退) + 取价决策FIX常驻日志
① GetFloatRate 不算尾缺价不再回退取期初定盘,改沿用已有利率
(preEod.FloatRate/position.FloatRate)——其返回值仅作 preEod.id==0 的种子
且会被分段首段强制取价覆盖,期初取价是无消费者的多余DB读且语义误导;
② BuildSegmentRates 等价重排为 if/else-if 结构,注释改"跳过取价/沿用"准确措辞
(行为不变:排除日有价仍取新利率,缺价沿用上一重置日利率);
③ 防历史bug"取错重置日利率"复发:GetFloatRate/ResolveFloatRate/BuildSegmentRates
三处取价决策经 SwapCalcTrace.Critical 常驻 Info 落盘——重置日判定、取价日
(interest_rule回拨)、命中/缺失、不算尾缺价沿用来源、排除日跳过全程可审计;
④ 测试真内存化:Stub 补 GetConsumedInterest=>0 override(复利路径原偷连96库,
与类注释"内存,不连库"矛盾);一致性断言措辞对齐新语义;
⑤ 修复 SwapDealService.cs 文件头双 BOM 损坏。
验证:GLMS20260817Fr007UnwindMorningTest 12/12 内存全绿;
邻近套件 67过/15败与改动前基线完全一致(15败均为沙箱无96库 Connect Timeout)。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-08-17 22:21:55 +08:00 |
|