Commit Graph
1214 Commits
Author SHA1 Message Date
yexuzhong 52b842ecab 国联民生 greeks计算代码完成 2026-08-03 17:44:25 +08:00
张名锐 e3a31886a8 Merge branch 'glms/feature/1.4.2' into glms/feature/dotnumber 2026-08-03 17:05:32 +08:00
张名锐 b2c4442772 feat(swaptrade): 利率相关 添加尾随零修剪和数值格式化功能
- 在数字输入组件中添加 trimTailZeros 配置选项
- 修改条件判断逻辑以支持尾随零修剪控制
- 为掉期交易利率添加固定精度格式化功能
- 创建 formatObservationRate 函数用于观察率数值格式化
- 在观察率输入字段中添加失焦时格式化事件处理
- 更新视图中的利率显示格式化方式
- 统一利息金额的货币格式化显示
2026-08-03 17:04:51 +08:00
yexuzhong b41346240c 债券期货 greek计算数据获取完成 2026-08-03 16:40:40 +08:00
yexuzhong 3f6c060b4c 国联民生 greek计算 40% 2026-08-03 16:13:40 +08:00
张名锐 fa6b2878c5 Merge branch 'glms/feature/1.4.2' into glms/feature/dotnumber 2026-08-03 15:11:38 +08:00
张名锐 613fd66b65 fix(swap): 解决(观察日)利率计算精度问题并优化价格精度处理
- 在SwapDealService中对GetFixedRate结果进行精度调整,解决原数据精度误差问题
- 在swapPricePrecisionHelper中添加roundDecimal方法并移除TODO注释
- 新增observationRate相关的精度处理函数,包括roundObservationRate和percent转换函数
- 创建serializeSwapIntervals函数用于处理掉期区间利率精度序列化
- 将consNumberFormat.umpriceP替换为swapPricePrecision.shiftDecimal进行百分比转换
- 使用新的精度处理函数替代原有的toFixed(6)和乘以0.01的操作
2026-08-03 13:21:23 +08:00
嬴政 时 e2f02d0549 交易确认书去除年利率, 增加签署日期 2026-07-31 21:27:19 +08:00
张名锐 74ded52829 Merge branch 'glms/feature/dotnumber' into 'glms/feature/1.4.2'
fix(swap): 修复利息互换平仓结算中的尾差处理和本金计算问题

See merge request otc-dev/zszq-trs!3
2026-07-31 09:02:31 +00:00
张名锐 2eba4ce2a9 feat(settlement): 添加标的类型判断逻辑支持价格表分流
- 在ConsGlobal中为所有标的类型常量添加中文注释说明
- 新增UseStockPriceTable方法用于判断标的类型是否使用股票价格表
- 修改SettlementPriceImportService中的价格表分流逻辑
- 添加单元测试验证股指期货、基金等进入股票价格表的逻辑
- 确保Shibor、利率收益率和债券指数进入正确的商品期货价格表
2026-07-31 16:57:49 +08:00
张名锐 a507d0ce66 feat: 新增利率收益率 债券指数小数点精度配置 2026-07-31 16:26:06 +08:00
张名锐 b0c06dc673 Merge branch 'glms/feature/1.4.2' into glms/feature/dotnumber 2026-07-31 16:20:42 +08:00
yexuzhong 5afd766a5f 债券收益率改成了利率收益率 2026-07-31 15:13:51 +08:00
yexuzhong 55b58856a5 #EQD-6787 国联民生-期权相关问题修复(2)PriceProvider支持债券表(Chinabondvaluation) 2026-07-31 15:06:16 +08:00
yexuzhong 633cd7d32d 计算指标可配置 2026-07-31 14:49:52 +08:00
马冰冰 f7e7aaa373 Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2 2026-07-31 11:27:13 +08:00
马冰冰 696ac168f0 Changes:全部统一成续作 2026-07-31 11:10:55 +08:00
yexuzhong 4c7011bfa8 日终持仓风险下载 2026-07-31 11:02:49 +08:00
张名锐 dfac28f54a Revert "fix(sac): 修复预览页序列化 SacInfo 时 TypeId 触发 IsGenericParameter 异常"
This reverts commit ca74095e0c.
2026-07-31 10:49:18 +08:00
yexuzhong 5d580960d8 #EQD-6669 国联民生-期权希腊值计算步长和细节调整(定价引擎部分) 2026-07-31 10:35:25 +08:00
张名锐 9d53d3dd8c Merge branch 'refs/heads/glms/feature/1.4.2' into glms/feature/dotnumber 2026-07-31 09:19:09 +08:00
张名锐 8ed4bc0f2f fix(swaptrade): 修复债券价格输入绑定和事件处理问题
- 绑定三个债券价格字段到当前Vue方法,确保正确的v-model和事件监听器
- 修复精度输入组件的事件契约,保留keydown、input、enter事件处理逻辑
- 解决格式刷新时不覆盖未提交输入的问题,维护用户输入状态一致性
- 将模板中的@change事件替换为@blur事件,改进输入焦点处理逻辑
2026-07-31 09:18:53 +08:00
hjhan ca74095e0c fix(sac): 修复预览页序列化 SacInfo 时 TypeId 触发 IsGenericParameter 异常
- SacDescriptionAttribute 增加 ShouldSerializeTypeId() 返回 false,
  跳过 Attribute.TypeId(System.Type)的序列化,避免 Newtonsoft 抛
  "Method may only be called on a Type for which Type.IsGenericParameter is true."
  (13.0.1 安全版对 Type 成员序列化行为变更后暴露)
- ExceptionMiddleware 改用 exception.ToString() 记录完整异常(类型+
  内层 message+堆栈),替代仅取最内层 message,便于定位此类反射异常根因;
  该信息仅写入日志,不返回前端
2026-07-31 09:10:18 +08:00
hjhan a871bcb9fe fix(login): 登录页 NeedCaptcha=false 时 CaptchaClick 避免 null.setAttribute 报错
页面加载时无条件调用 CaptchaClick(),但 <img id="captcha"> 仅在
NeedCaptcha=true 时渲染,导致无需验证码时 getElementById 返回 null,
null.setAttribute 抛错。增加 if (!img) return 守卫,img 存在时行为不变。
2026-07-31 09:10:05 +08:00
hjhan 74c434bdd8 fix(swaptrade): 修复重输/重贴原值后回车不触发计算、粘贴不标记REV的静默失效
- swapPricePrecisionHelper: onKeydown 回车时无条件派发 input+enter,
  不再依赖仅值变化才触发的原生 change;onPaste 粘贴即派发 input 标 REV;
  onChange 不再派发 enter(改由 onKeydown 唯一派发,避免重复计算)
- 新增 fe-tests/swapPriceInput.component.test.js 回归守卫(6 用例,
  回退旧版即变红,锁定该 QA 高优 Bug 修复)
- bundle/bundleV2: otcDebug 调试开关改为 localStorage 持久化 +
  URL ?otcdebug=1 触发,便于排查价格计算链路
2026-07-31 09:07:08 +08:00
张名锐 3670dde9bf fix(swap): 修复利息互换平仓结算中的尾差处理和本金计算问题
- 修复ExecuteSaveAutoEodInterestPosition方法参数传递,添加lastEodSwap、posiLongNotional和orginPv参数
- 修正平仓利息计算逻辑,区分手动结算和平仓后自动结算的利息处理
- 新增ResolveUnwindPreviousNotional静态方法,优化平仓前本金计算逻辑
- 修复部分平仓后利息累积边界问题,确保仅从上次EOD快照后开始计算
- 完善自动结算利息的四舍五入处理,避免精度丢失
- 修正支付端方向符号应用,确保方向只应用一次
- 更新TdInterestPrincipal计算逻辑,处理不同利息模式下的本金赋值
- 修复TdCloseInterest计算,合并手动和自动结算利息金额
- 优化InterestIncomeSum计算,正确处理结算后剩余未实现利息
2026-07-30 23:29:07 +08:00
tengyufan cb2076d9ff fix: 交易确认书编号筛选项保持单行显示
- 国联交易确认书页面加宽交易确认书编号筛选项标签和容器
- 避免交易确认书编号标签自动换行
2026-07-30 17:58:51 +08:00
马冰冰 99438ccaf4 Merge branch 'glms/feature/1.4.2-0730' into glms/feature/1.4.2 2026-07-30 17:48:55 +08:00
tengyufan 20e4b82ae3 fix: 修复国联收益互换交易编号首次生成大小写不一致
- 首次入库后按 UpperTradeNumber 配置统一交易编号大小写
- 避免自动生成小写编号在后续编辑保存时被转为大写
- 补充交易编号大小写配置的单元测试
2026-07-30 17:46:18 +08:00
马冰冰 807ac15417 feature:续作按钮应当有角色权限控制 2026-07-30 17:46:14 +08:00
lisong 715068b759 Merge remote-tracking branch 'dest/glms/feature/1.4.2' into feature/p132_74-risk-engine 2026-07-30 16:03:37 +08:00
lisong f8ec822667 Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine 2026-07-30 16:02:37 +08:00
tengyufan f535ed362c Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2 2026-07-30 14:46:26 +08:00
tengyufan 43981e245b #EQD-6718 国联民生-收益互换隐藏收支方向,默认我方收取浮动收益
fix:国联民生收益互换隐藏收支方向,默认我方收取浮动收益

- 新增可配置开关 Erp.SwapFloatingIncomeReceiveOnlyMode,默认关闭,支持在普通模式与网厅适配模式之间切换
- 网厅适配模式下,新增及续做收益互换默认浮动端为我方收取,并隐藏新增、平仓、收益结算及查看页面的浮动端收支方向
- 普通模式保持原有展示和编辑逻辑,历史交易不修改原有浮动端收支方向
- 日终持仓风险_互换将浮动收支方向和标的多空合并为交易方向,并同步影响导出
- 交易方向映射收取+B为多头、收取+S为空头、支付+B为空头、支付+S为多头
- 新增交易方向映射专项前端单测
2026-07-30 14:46:07 +08:00
hjhan 52c11e7540 fix(diag): 简化 otcDebug 调试开关命名并支持 localStorage 持久化
- __otcDiag 双源对象拆为 __diag(版本元数据, 仅供 banner 展示) + __debug(调试开关布尔值, 唯一真相来源), 消除 __私有对象 与 otcDebug.API 大小写混搭。
- __debug 解析顺序: URL ?otcdebug=1(命中即写回 localStorage) -> localStorage -> 兜底 __diag.debug。同源父子 frame 共享 localStorage, 使 _InfoLayout iframe 弹窗(新增互换交易)自动继承父页面开过的调试开关, 修复弹窗内无调试日志。
2026-07-30 14:42:10 +08:00
ruisu 759edfbde4 Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine 2026-07-30 13:33:19 +08:00
ruisu 3df280d9f0 feat:增加日历与价格偏离辅助函数,修复日志过长无法落库的问题,修复老风控特批、新风控不批时,前端展示为提示框,不是细节框的问题。 2026-07-30 13:32:47 +08:00
尹峰 5cd5dbd51c fix conflict 2026-07-30 13:31:19 +08:00
尹峰 07be0e61a9 feat: 变量删除时校验是否有规则引用,有则阻止 2026-07-30 13:29:16 +08:00
张名锐 78aac109d0 Merge branch 'glms/feature/1.4.2' into glms/feature/dotnumber 2026-07-30 13:05:41 +08:00
张名锐 345085677e refactor(swaptrade): 优化价格输入组件的事件处理机制
- 添加 enterPressed 和 formatSnapshot 状态管理
- 实现键盘事件监听和回车键处理逻辑
- 优化数据更新时机和事件触发顺序
- 添加格式配置变更检测功能
- 更新模板事件绑定方式
- 修改价格输入事件回调方法名以区分不同场景
2026-07-30 11:33:55 +08:00
hjhan 7a9702c707 fix(diag): JsVersion 纳入前端文件 mtime,修复纯前端改动缓存不刷新
根因(?otcdebug=1 排查时暴露):JsVersion 只取 bin/YLErp*.dll 的 mtime,
纯前端改 wwwroot/Scripts 而不重编 DLL 时,?v= 缓存戳不变,浏览器仍加载旧版
——即"发布了但不更新"。

修复:
- JsVersion = max(DLL mtime, wwwroot/Scripts/** mtime, wwwroot/Statics/bundles/** mtime)
- wwwroot 定位用 Directory.GetCurrentDirectory()(与 StaticUrlMiddleware 一致,
  开发=项目根/部署=publish 目录),目录不存在则回退仅 DLL mtime
- BinFileVersion 保持原义(仅 DLL,用于诊断显示后端构建时间)

附带修复 git 字段:AssemblyInformationalVersion 无 +sha(如固定版本 1.0.0)时,
回退从 .git/HEAD 读取当前 commit 短 sha,不再误显示 '1.0.0'

验证:dotnet build 0 错误
2026-07-30 11:25:11 +08:00
tengyufan b3484c3618 fix: 国联民生收益互换支持审批前生成交易确认书
- 仅国联民生收益互换支持在新增待确认、修改待确认、审批中生成交易确认书,期权、其他公司及其他交易状态保持原限制
- 交易确认书页面同步开放上述交易的“生成确认书”按钮,后端批量生成链路同步放开状态过滤
- 审批前生成仅校验客户、标的、初始持仓等模板必需核心数据;不以银行账户、联系人、保证金等非模板必填资料阻断
- 审批前已生成确认书的交易被修改时,使该交易原确认书关联失效,重新生成仍按原覆盖逻辑处理
- 审批拒绝时清理该交易审批前生成的确认书关联、OA 结果及用印队列;无其他有效引用时删除确认书数据,避免遗留无效确认书
- 保持原交易编号逻辑:自动生成和手工填写均不复用已拒绝交易编号
- 新增审批前适用范围、确认书关联及 OA 清理谓词专项单测
2026-07-30 11:10:48 +08:00
张名锐 85f1bccb24 Merge branch 'glms/feature/1.4.2' into glms/feature/dotnumber
# Conflicts:
#	YLErpWeb/App_Data/Config/otcformat.js
#	YLErpWeb/Views/SwapTrade2/TradeEdit.cshtml
#	YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeEdit.js
2026-07-30 10:50:44 +08:00
hjhan c519dcf44f fix: otcDebug 开关在 _InfoLayout(TradeEdit)页面也能从URL读取
根因(用户反馈:开了 ?otcdebug=1 但输入/计算无任何 console 输出):
1. 用户实际在 /swapTrade2/TradeList 页面——该页不加载 swapTradeEdit.js(埋点所在),
   只加载 swapTradeList.js(零债券代码),故三字段 trace 永远不会执行。
2. 即使跳到 TradeEdit 页面,_InfoLayout.cshtml(TradeEdit 用的 layout)
   未灌入 window.ylotc.__diag,导致 main.js 中:
     var __otcDiag = (window.ylotc && window.ylotc.__diag) || { debug: false };
   → debug 永远 false → 所有 otcDebug.log 全部空转。

修复:main.js 的 __otcDiag 初始化改为双源读取——
  优先用 _MainLayout 灌入的 ylotc.__diag(含 jsVersion/git/built 元数据);
  若 layout 未灌入(_InfoLayout 等),则从 ?otcdebug=1 / localStorage.otcdebug 直接读,
  确保 debug 开关在所有页面生效。

测试:diag 18 + bondCalc 81 = 99 例全过。
注意:此改动在 main.js 中,需重建 bundle.js 才能生效(dotnet publish 自动触发)。
2026-07-30 10:30:31 +08:00
hjhan 72b2a4cbf6 fix: 债券三字段调试日志改为 otcdebug gated,出问题时一键可定位
用户指出:上一笔直接删了 onBondPriceKeydown 的逐键 console.log 又没补 gated 版,
等于平时没噪音了、真出问题也看不见——这正是反复改几十遍都满足不了需求时才需要日志兜底的场景。

修复:
- onBondPriceKeydown 逐键 before/after(driver/rev) trace 改为 otcDebug.log(?otcdebug=1 才输出)
- onBondPriceEdit(失焦/粘贴) 补同款 gated trace
- calcBondForItem 补 enter/success/calc-error/post-fail 四条 gated trace
  → 三字段整条链路(逐键→回车→计算器→源/AUTO或失败)开开关即得完整现场
- main.js 第226/669行 catch 内 error console.log 保留(错误日志本就应在生产可见,利于定位)
- otcDebug 机制本身已存在且唯一:?otcdebug=1 或 localStorage.otcdebug=1 开启,
  _MainLayout 注入 jsVersion/git/built,加载时打带版本 banner,平时零噪音

测试:
- diag.test.js 新增源码守卫:swapTradeEdit.js 三字段埋点必须 otcDebug.log、不得退回裸 console.log
- diag 18 例 / bondCalc 81 例全过
2026-07-30 10:15:00 +08:00
hjhan ead2c01f0d fix: 债券三字段 keydown 守卫改用正向白名单,堵住"没改值却标REV"的缺口
根因:onBondPriceKeydown 的按键排除列表只排除回车/Ctrl-Alt-Meta/Tab/Home/End/←→/F5,
漏掉 ↑(38)/↓(40)/Insert(45)/PageUp(33)/PageDown(34)/F1-F4,F6-F12/纯Shift。
这些键不改变数值却会触发 applyBondManualEdit 标 REV——正是用户观察到的
"鼠标放输入框没改值、只按了方向键/功能键却有时出现REV"。

修复:
- swapCalc.js 新增纯函数 isBondPriceValueKey(event):正向白名单(数字/小数点/减号/Backspace/Delete)
  才返回 true,其余(回车/修饰键/导航键/功能键/纯Shift)返回 false,jest 可测。
- swapTradeEdit.js onBondPriceKeydown 改用该函数判定,并移除两行每次按键的 console.log 噪音。
- 纯鼠标聚焦(无按键)本就不会标REV(无 focus/click 处理;vue-number-input 的 input 仅在值变化(失焦/回车)触发),
  本次仅修正按键守卫缺口。
- 同步补 9 个单测覆盖各类按键(响应"最好单测阶段解决")。

约定1/约定2/约定3 累加REV 行为不受任何影响(仅改判定是否标REV的触发条件)。
测试:bondCalc 全套 81 例通过。
2026-07-30 10:06:42 +08:00
hjhan c97d7e7995 feat(diag): 可保留调试日志+版本可追溯机制(阶段0.5止血增强)
解决 EQD-6838 排查时硬编码版本号 v20260729a 散落3处、无法按需开关、
看不到实际加载缓存戳的问题。

层1 运行时开关(核心):
- HtmlUtil.cs 新增 GitCommit(读 AssemblyInformationalVersion,零新依赖)
- _MainLayout.cshtml 注入 window.ylotc.__diag(jsVersion+git+built)
- main.js 顶部新增 otcDebug 工具(banner+log),debug 默认 false 生产零输出
- swapTradeEdit.js / fastVue.base.js 硬编码标记改为 otcDebug.banner
- 开启方式:URL ?otcdebug=1(会话)或 localStorage.setItem('otcdebug','1')(持久)

层2 构建守卫:
- pre-commit 新增第三块 bundle 版本一致性检查(rebuild-bundles.py --verify)
- 修复 Windows python3 Store stub 不可用问题(优先用 python)
- 注:bundle 头部不注入 git sha(会随 commit 变化导致 verify 永久失败),
  版本可追溯完全由运行时 __diag(后端注入)覆盖

层3 单测预防:
- 新增 diag.test.js(213测试之一),用 console spy 守卫开关行为
- 断言不再含硬编码 v20260729a + 防止第二套调试开关回归

验证:11 suites/213 tests 全绿,--verify 通过,C# 编译0错误
2026-07-30 10:06:21 +08:00
hjhan 0747deb909 fix: 步骤3-b 多字段连续手动编辑应累计REV(不再仅最后赢)
根因:applyBondManualEdit 每次调用先重置全部 bondRev 再只标当前字段,
导致连续手动编辑多字段(不回车)时只有最后编辑的字段留 REV,
中间手工编辑字段的 REV 被静默抹掉,UI 与步骤3-b需求不符。

修复:applyBondManualEdit 改为累计 REV(仅置当前字段、保留其它已手工编辑字段的 REV),
driver/AUTO 仍清。单字段编辑(步骤2/3)行为不变,无回归。

配套:
- 更新 a2d2bb31 中3个旧断言("仅最后留REV")为断言累加,避免测试守护错误行为
- 文档约定3 补充"连续编辑多字段时各手动字段累计REV"

swapCalc.js 为独立 script(?v=JsVersion),部署 dotnet publish 即生效,无需重建 bundle。
测试:bondCalc 全套 72 例通过。
2026-07-30 09:55:57 +08:00
hjhan a2d2bb31ea test: 补齐步骤3-b及多字段组合场景的债券三字段测试覆盖
文档(互换债券三字段互算踩坑总结与测试指南.md)列出的步骤3-b
(不敲回车连续编辑多字段)此前无任何测试断言最终落标状态。

新增 7 个用例(35->42,总计72->79):
- Step3-b: 回车CP->改DP->改YD(均不回车) -> 仅YD留REV
- Step3-b变体: 连续编辑CP->DP->YD -> 仅最后赢
- 三字段轮换(CP->DP->YD->CP) -> 仅最终CP留REV
- 步骤4-1: 回车CP->回车DP->改YD -> 多源降级为单REV
- 步骤4-1变体: 三字段都回车后改CP -> 仅CP留REV
- 数值保留守卫: 多次applyBondManualEdit不联动修改任何价格值

核心发现:applyBondManualEdit每次重置全部bondRev再只标当前字段,
故多字段连续编辑时只有最后一个字段保留REV是确定性行为,
现已用测试钉死,防止未来重构破坏此语义。
2026-07-30 09:22:12 +08:00