张名锐
|
8ed4bc0f2f
|
fix(swaptrade): 修复债券价格输入绑定和事件处理问题
- 绑定三个债券价格字段到当前Vue方法,确保正确的v-model和事件监听器
- 修复精度输入组件的事件契约,保留keydown、input、enter事件处理逻辑
- 解决格式刷新时不覆盖未提交输入的问题,维护用户输入状态一致性
- 将模板中的@change事件替换为@blur事件,改进输入焦点处理逻辑
|
2026-07-31 09:18:53 +08:00 |
|
张名锐
|
3670dde9bf
|
fix(swap): 修复利息互换平仓结算中的尾差处理和本金计算问题
- 修复ExecuteSaveAutoEodInterestPosition方法参数传递,添加lastEodSwap、posiLongNotional和orginPv参数
- 修正平仓利息计算逻辑,区分手动结算和平仓后自动结算的利息处理
- 新增ResolveUnwindPreviousNotional静态方法,优化平仓前本金计算逻辑
- 修复部分平仓后利息累积边界问题,确保仅从上次EOD快照后开始计算
- 完善自动结算利息的四舍五入处理,避免精度丢失
- 修正支付端方向符号应用,确保方向只应用一次
- 更新TdInterestPrincipal计算逻辑,处理不同利息模式下的本金赋值
- 修复TdCloseInterest计算,合并手动和自动结算利息金额
- 优化InterestIncomeSum计算,正确处理结算后剩余未实现利息
|
2026-07-30 23:29:07 +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 |
|
张名锐
|
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 |
|
hjhan
|
ad16095729
|
docs: 更新改进方案——补充双bundle架构说明+qiankun微前端现状+阶段0已完成标记
|
2026-07-29 22:47:10 +08:00 |
|
hjhan
|
d380ae3f28
|
docs: 新增 zszq-trs 接手统一总览(技术栈地图/高频优先级/6大坑/学习路径/文档复核/微前端盲区)
|
2026-07-29 22:46:42 +08:00 |
|
hjhan
|
6b32f254b1
|
test(fe): 阶段0止血——pre-commit守卫+postSafe+jest.config+CI脚本+otcformat精度修复
|
2026-07-29 22:33:45 +08:00 |
|
hjhan
|
daaf993126
|
docs: 互换模块长期改进方案——从106次提交47%修复率到可预测交付
|
2026-07-29 22:13:28 +08:00 |
|
hjhan
|
ffa51c6ae6
|
test(EQD-6838): 补充债券三字段互算集成层测试 + 踩坑总结文档
|
2026-07-29 21:28:07 +08:00 |
|
hjhan
|
56256cad0b
|
[EQD-6838] 补充踩坑注释:main.post 业务错误走 reject、本文件独立 script 部署、bundle 大小写敏感+非致命
- base/main.js __post/main.post:标注业务错误(success=false/errcode)与网络异常均走 deferred.reject,
调用方只挂 .done 会静默跳过失败分支(约定2补充曾因此长期不生效)。
- app/swaptrade/swapTradeEdit.js calcBondForItem:标注本文件为独立 <script>(不在 bundle.js)、须 dotnet publish
刷新 JsVersion 缓存键才生效;并展开 .fail 注释记录约定2补充一度不生效的历史根因。
- rebuild-bundles.py:标注 bundleconfig 输入路径在 Linux 大小写敏感(曾 MISSING 打挂 publish)、
缺失输入必须非致命(否则 exit 1 连带打挂 dotnet publish)。纯注释,无逻辑改动。
|
2026-07-29 19:51:42 +08:00 |
|
hjhan
|
ce4ef62950
|
[EQD-6838] 修复约定2补充:计算器算不出时另两字段清空+三标识全清(main.post reject 未走 .done)
- 根因:main.__post 在 resp.success===false(业务错误) 时 deferred.reject,而 calcBondForItem 仅挂 .done,
导致业务错误/网络异常分支整段被跳过,applyBondCalcFailure+syncBondFlags 不执行,约定2补充静默失效。
- 修复:main.post 链补 .fail 处理 reject(业务错误+网络异常),统一在此清空非源字段+清 源/AUTO/REV 标识;
另为两个 pre-POST 失败分支(源为空、开始日缺失)补 syncBondFlags,使视图刷新。
- 错误文案仍由 __post 的 alertFn(main.message) 非阻塞提示,不重复弹。纯函数 applyBondCalcFailure 逻辑不变。
|
2026-07-29 19:44:10 +08:00 |
|
hjhan
|
7c0572ade8
|
fix(EQD-6838): 约定3 按键清标识加排查日志+forceUpdate兜底
1. syncBondFlags 改用新对象引用({} 字面量)确保 Vue 2 响应式触发
2. 加 \ 兜底,防止 \ 因相同值未触发更新
3. onBondPriceKeydown 加 console.log 排查日志,确认事件是否触发
用户反馈:版本标记 v20260729a 已加载、重算按钮已消失,
但约定3(删字符不消失标识)和约定2补充(计算错误不清零)仍未生效。
加日志确认 keydown 事件是否触发、状态值是否正确。
|
2026-07-29 19:31:59 +08:00 |
|
hjhan
|
8124bb46bb
|
chore(EQD-6838): 加版本标记日志用于排查 Jenkins 部署是否加载最新代码
在 swapTradeEdit.js 和 fastVue.base.js 开头加 console.log 版本标记。
F12 Console 看到 v20260729a 说明加载的是最新版本;
看不到说明缓存未刷新或访问的是旧页面。
|
2026-07-29 19:27:52 +08:00 |
|
hjhan
|
f5ed65aac5
|
fix(EQD-6838): 补网络错误/响应异常分支的约定2补充处理
calcBondForItem 的 if(!resp||!resp.obj) return 分支之前直接返回,
未调 applyBondCalcFailure,导致网络错误时另两字段和标识未清空。
现在统一清另两字段+三标识,与业务错误/开始日缺失/源字段为空一致。
|
2026-07-29 19:21:06 +08:00 |
|
hjhan
|
cee69a02eb
|
fix(EQD-6838): 修复约定2/3标识不更新的Vue响应式问题 + 组件内emit keydown + 去掉重算按钮
根因1(约定3按键不触发):
- .native 修饰符在 vue-number-input 上不可靠(jQuery在mounted中重新绑定了keydown)
- 改为在组件内部 addEventListener('keydown') + $emit('keydown')
- cshtml 从 v-on:keydown.native 改为 v-on:keydown
根因2(约定2/3标识不更新):
- bondDriverType/bondAuto/bondRev 不在后端数据中,直接赋值不触发Vue2响应式更新
- 成功分支之前用 $forceUpdate 兜底,但失败/编辑/按键分支没有
- 新增 syncBondFlags 方法,用 $set 强制触发响应式更新
- 在所有状态变更后调用:onBondPriceEdit/onBondPriceKeydown/onDpPriceInput/
calcBondForItem成功/失败/setUnderlyingCode/加载路径
其他改动:
- 去掉"重算"按钮(用户确认不再需要)
- calcBondForItem 成功分支用 syncBondFlags 替代 $forceUpdate
- 重建 bundle.js(fastVue.base.js 是 bundle 输入)
|
2026-07-29 19:20:13 +08:00 |
|
hjhan
|
d662399ab4
|
feat(EQD-6838): 债券三字段交互约定2/3 + 簿记逻辑1 实现
问题:
- 簿记基础逻辑1未满足:选标的后 setUnderlyingCode 调 getSpotPrice 自动填充净价/全价
- 交互约定3未满足:vue-number-input 的 input 事件只在失焦/回车时触发(__change),
按键输入时不触发,导致用户输入过程中 源/AUTO 标识不会消失
- 交互约定2补充未满足:calcBondForItem 的早期返回分支(源字段为空/开始日缺失)
未调 applyBondCalcFailure,导致回车后另两字段和标识未清空
修复:
- 簿记逻辑1:setUnderlyingCode 切换标的时清空净价/全价/收益率三字段,
不再调 getSpotPrice 自动回填;refreshInitialUnderlyingPrices 续发场景也不自动填充
- 交互约定3:cshtml 三个 vue-number-input 加 v-on:keydown.native 绑定,
新增 onBondPriceKeydown 方法——按键即清 源/AUTO 标识、标本字段 REV;
回车键(13/108)和修饰键(Ctrl/Alt/Tab/方向键等)除外
- 交互约定2补充:calcBondForItem 的源字段为空/开始日缺失两个早期返回分支
也调 applyBondCalcFailure,确保回车后另两字段清空、三标识全清
|
2026-07-29 19:09:29 +08:00 |
|
hjhan
|
fb00f13421
|
fix(EQD-6838): 修复 CI 因文件名大小写和脚本 fail-fast 阻塞构建
问题:
- bundleconfig.json 中 Myjs.js/isoweek.js 在 Linux CI 上找不到
(实际文件名是 MyJs.js/isoWeek.js,Windows 不区分大小写所以本地能跑)
- py/ps1 脚本遇到缺失输入文件时 exit 1,导致 dotnet publish 失败,
Jenkins 构建被阻塞,部署无法进行
修复:
- bundleconfig.json: Myjs.js → MyJs.js,isoweek.js → isoWeek.js
(与实际文件名大小写一致,Linux CI 可正确找到)
- rebuild-bundles.py/ps1: 重建模式遇到缺失输入文件时只警告不 fail,
跳过该 bundle 保留已提交产物,避免阻塞 CI 主构建
- 只有 Verify 模式(开发本地手动校验)才因缺失/BOM 报错 exit 1
设计原则:bundle 重建是"尽力而为",绝不能阻塞主构建和部署
|
2026-07-29 19:01:19 +08:00 |
|
hjhan
|
54b8ae5cf5
|
[EQD-6838] bundle 重建优化:挂 Build 触发点 + CI 强制全量 + 增量检查
- csproj: GenerateBundlesBeforePublish 改为 GenerateBundlesBeforeBuild,
挂 BeforeTargets=Build 让 IDE F5/Rebuild 也能自动重建,开发者无需记命令
- rebuild-bundles.ps1/py: 加 CI 环境检测(CI/JENKINS_HOME/BUILD_NUMBER),
CI 下强制全量重建避免 git checkout 后 mtime 不可靠;本地开发走增量检查
- rebuild-bundles.ps1: BOM 在重建模式下只警告不 fail(重建会自动剥离),
避免 form-layout.css 的 BOM 阻塞 CI 部署
- csproj: 新增独立 VerifyBundles target 供手动校验,不影响 Build/Publish
- csproj: 新增 SkipBundleGeneration 属性开关,特殊场景可跳过自动重建
- deploy/jenkins-build.sh: 添加 Jenkins 构建脚本参考副本(不参与 CI 执行),
更新注释说明 target 改名后的 CI 行为
|
2026-07-29 18:54:38 +08:00 |
|
hjhan
|
76f5caabd9
|
fix(EQD-6604): 补 GuolianContractNoGenerator.BuildTradeNumber 纯函数,修复 UnitTestProject 编译失败
测试 GuolianContractNoGeneratorTest 调用了 BuildTradeNumber(trade, clientCode, sequenceNo) 纯函数,
但生产类此前只有依赖数据库的 Generate(YLContext, ...)。抽出不连库的 BuildTradeNumber 供测试与 Generate
共用,编号格式与现有 Generate 输出完全一致(GLMS-{client}-{yyyyMMdd}-FICC-{序号}-{去点标的})。
6 个单测全部通过,生产行为不变。
|
2026-07-29 18:39:09 +08:00 |
|
张名锐
|
9962ee4e5a
|
fix(swaptrade): 交易簿记 全价净价等不补0
- 移除多余的数字分割和补零逻辑
- 使用正则表达式优化小数点后无效零的去除
- 简化空值检查条件
- 保留有效数字部分的正确格式化输出
|
2026-07-29 18:06:03 +08:00 |
|
hjhan
|
c912f274fd
|
[EQD-6838] 修正前端 bundle 重建:bundle.css 历史乱码清理 + ps1 换行符统一 LF
- bundle.css: 清理 5 处历史 UTF-8 替换字符(锟斤拷)乱码注释,与重建脚本生成结果一致
- rebuild-bundles.ps1: 拼接分隔符由 CRLF 改为 LF,并归一化输入 CRLF->LF,
使 Windows 自动生成产物与仓库内已提交(LF)制品逐字节一致
|
2026-07-29 17:57:01 +08:00 |
|
hjhan
|
2bfdce6ee0
|
[EQD-6838] 前端 bundle 确定性重建:自动生成脚本 + 发布期自动打 bundle
新增 rebuild-bundles.py/.sh/.ps1,按 bundleconfig.json 确定性重建 6 个 bundle 产物(剥 BOM、CRLF->LF、文件间换行分隔、CSS 相对 url() 重写,已逐字节比对验证与已提交版一致,其中 bundle.css 修正了历史打包产生的 CSS 注释 GBK 乱码)。
YLErpWeb.csproj 新增 GenerateBundlesBeforePublish 目标,在 publish 前自动运行脚本重建 bundle(CI 自动生效,无 python3 时优雅跳过回退已提交产物),从此改源文件后部署自动重新打 bundle,不再需要手工记得到处重建。
.gitattributes 将 bundle 锁为 eol=lf,.editorconfig 为 JS/TS 加 charset=utf-8,从根上防止 BOM/ZWNBSP 复发。
|
2026-07-29 17:47:13 +08:00 |
|
张名锐
|
db46e48ec5
|
fix(swap): 修复互换产品到期结算和利息计算逻辑
- 优化到期日最终结算判断逻辑,确保只有完全覆盖才清零待实现余额
- 引入利息金额舍入处理,避免精度差异导致的结算误差
- 完善自动互换流水处理,确保实际结算金额与待实现计算分离
- 修复部分平仓后日终持仓继承逻辑,保持利息累计连续性
- 调整到期自动互换处理,确保最后结算后待实现余额正确归零
- 优化利息收入和费用的独立计算,避免历史数据重复计算问题
|
2026-07-29 17:37:57 +08:00 |
|
tengyufan
|
d1f697c524
|
#EQD-6604 国联民生-确认书编码生成环节移到簿记(支持手工录入)
feat: 国联民生收益互换簿记后按确认书规则生成交易编
- 补充单测文件
|
2026-07-29 17:14:40 +08:00 |
|
张名锐
|
a4906010a9
|
fix(swaptrade): 前端 净价/全价精度控制分开处理
- 添加净价全价配置独立维护逻辑
- 根据列名判断使用netPrice或grossPrice字段
- 期初净价列使用netPrice字段格式化
- 其余价格列保持使用grossPrice字段
|
2026-07-29 17:12:51 +08:00 |
|
tengyufan
|
e1c5f72418
|
#EQD-6604 国联民生-确认书编码生成环节移到簿记(支持手工录入)
feat: 国联民生收益互换簿记后按确认书规则生成交易编号
- - 国联收益互换首次入库后复用原交易确认书编号规则生成交易编号,保留手工填写的交易编号
- 覆盖手工新增、系统流水自动簿记、普通交易导入、流水导入和日终合成今日交易流水
- 自动流水簿记增加本地事务,交易编号回写与基础簿记数据失败时统一回滚
- 交易确认书生成时直接取交易编号,不再重新生成确认书编号
- 结算管理-交易确认书页面将合约编号更名为交易确认书编号
- 上传确认书时将合约编号更名为交易确认书编号
- 历史交易编号不处理
|
2026-07-29 16:45:29 +08:00 |
|
hjhan
|
4bebcf7fcb
|
fix(bundle): bundle.js 纳入 ENTER 事件改动并移除 ZWNBSP;MyJs.js 剥离 BOM [EQD-6838]
|
2026-07-29 16:32:15 +08:00 |
|
hjhan
|
6911b9d758
|
revert: 禁用 BuildBundlerMinifier 并还原原始可用 bundle 产物,恢复测试环境
- 现象:上一提交接入 BuildBundlerMinifier 后,Jenkins 构建按 bundleconfig.json 重建的
bundle 与原始可用版本不一致(dayjs 插件顺序错乱、且 bundleconfig.json 缺少 moment.js
等多文件),导致 bundle.js 加载即抛 dayjs_plugin_isoWeek is not defined,整页脚本崩溃
(jqGrid/main/otcformat 等全局未定义)。
- 本次先恢复可用性:
1. 还原 8 个原始可用 bundle 产物(b9f2bd14 版本: jquery.js/bundle.js/vue.js/bundle.css/
bundleV2.css/bundleV2.js/bundle.min.css/bundleV2.min.css) 重新纳入版本库,Jenkins 原样部署。
2. 移除 YLErpWeb.csproj 的 BuildBundlerMinifier 包,避免构建时再用错乱 config 覆盖还原产物。
3. 还原 .gitignore 中 bundle 忽略段,使产物重新被跟踪。
- 后续(待讨论):修正 bundleconfig.json 的输入顺序与文件集(对齐原始可用顺序 + 补 moment.js
等),再重新启用自动构建,届时 fastVue.base.js 的 enter 改动会被正确打包。
- 注:本提交还原的是 enter 修复前的可用基线(页面可用,回车触发计算器仍待第二步解决)。
|
2026-07-29 15:57:38 +08:00 |
|
hjhan
|
14ed09d628
|
build: 接入 BuildBundlerMinifier 自动重建 bundle 产物并剥离源文件 BOM
- 根因:页面(_MainLayout 等)加载的是 bundle.js 等由 bundleconfig.json 打包的生成产物,
但 csproj 未接入 BundlerMinifier,dotnet build 不会重生它们,Jenkins 只是把 git 里
陈旧的 bundle.js 原样发布 -> 改了 fastVue.base.js 后回车不生效(部署的 bundle 仍是无
enter 的旧版)。且源文件带 UTF-8 BOM,拼接后每个 BOM 落入文件中间成为 ZWNBSP,提交
diff 充满不可见字符(历史上曾多次在产物上手工清 BOM 打补丁)。
- 修复:
1. YLErpWeb.csproj 新增 BuildBundlerMinifier(3.2.449);其 BundleMinify 目标在
BeforeCompile 自动按 bundleconfig.json 重建全部 bundle,Jenkins 构建即自动产出正确版本,
不再需要手工重建并提交 bundle.js。
2. .gitignore 忽略 8 个生成产物(jquery.js/bundle.js/vue.js/bundle.css/bundleV2.css/
bundleV2.js/bundle.min.css/bundleV2.min.css) 并 git rm --cached 取消跟踪;这些产物
永不再入版本库、永不陈旧。
3. 剥离 15 个喂给 bundle 的源文件(及 css)开头的 UTF-8 BOM,使重建产物不再含 ZWNBSP。
- 验证:本地 dotnet build -t:BundleMinify 重建后 8 个 bundle 全部 BOM=0,bundle.js 含完整
enter 链路(_enterFired/isEnter/$emit('enter'));删除 bundle.min.css 后构建可自动重建。
|
2026-07-29 15:42:35 +08:00 |
|
hjhan
|
7fc4babc28
|
fix(fast): 重建 bundle.js 纳入 ENTER 事件改动 + 新增 enter 链路单测
- 根因:页面(_MainLayout)加载的是 bundle.js(由 bundleconfig.json 打包 fastVue.base.js 等生成),
而非原始 fastVue.base.js;源码树 bundle.js 是改动前的陈旧构建产物(tracked in git),
导致测试环境部署拿到缺 _enterFired/$emit('enter') 的版本,回车不触发计算器($emit('enter') 未被发出)。
- 修复:按 bundleconfig.json 输入顺序重建 bundle.js(minify:false=顺序拼接),diff 仅 10 行,
重建后含完整 enter 链路(_enterFired/isEnter/$emit('enter')),与源码 fastVue.base.js 一致。
- 新增 fastVue.enter.test.js(jsdom+jQuery):覆盖 numberInput 底层 Enter→_enterFired→onchange(isEnter) 与
vueNumberInput 组件 $emit('input')+$emit('enter') 分发,9 项全过;定位期单测证明代码逻辑本身正确,
问题在构建/部署产物陈旧。
|
2026-07-29 15:22:06 +08:00 |
|
张名锐
|
3d73835be5
|
fix(swap): 结算或全部平仓后,待实现置0
- 添加 NormalizeSettledInterestAmounts 方法处理手工平仓和互换的利息事件精度
- 添加 NormalizeManualSettlementAmounts 方法在手工结算前收敛流水金额
- 将利息计算精度从 ConsGlobal.PriceRound 统一调整为 InterestCalculationPrecision(12位)
- 在日终持仓快照中添加精度标准化处理,利息腿保留12位精度
- 修复全量平仓时待实现利息和费用的清零逻辑
- 在收益结算事件后清空待实现利息余额避免重复计算
- 更新单元测试验证现金与两位利息事件的一致性
|
2026-07-29 14:42:03 +08:00 |
|
hjhan
|
b9f2bd14f6
|
feat(swaptrade): 债券三字段计算器交互改为回车触发并加源/AUTO/REV 三态标识
- 约定1:仅在净价/全价/收益率输入框敲回车触发计算器,失焦不触发
- 约定2:计算成功->源字段标"源"、另两字段标"AUTO";失败->保留源值、清空另两字段与标识
- 约定3:编辑某字段未回车->不联动另两字段,清源/AUTO、仅本字段标"REV"
- swapCalc.js 新增 applyBondCalcSuccess/Failure/ManualEdit 纯函数,applyBondCalcResult 第三参由 manualSet 改为 driver(跳过源字段写回)
- fastVue.base.js 新增 enter 事件区分回车/失焦,向后兼容旧的 input 行为
- TradeEdit.cshtml 三字段 input/enter 分离绑定 + 源/AUTO/REV 三态标签(去除旧铅笔图标)
- 重写 bondCalc.test.js / 更新 swapCalc.test.js 覆盖状态机;jest 68 项全过
|
2026-07-29 14:34:25 +08:00 |
|
tengyufan
|
8c4f452482
|
fix: 统一互换部分平仓交易费用与待结算费用的分摊舍入
|
2026-07-29 13:47:45 +08:00 |
|
tengyufan
|
e1d68393f8
|
fix: 修复基础费率平仓待结算费用按实际平仓规模分摊
|
2026-07-29 13:07:55 +08:00 |
|
张名锐
|
bff3e920ce
|
conf: 自动补零;小数点精度配置文件修改
|
2026-07-29 09:49:37 +08:00 |
|
张名锐
|
fd2a054764
|
feat(swap): 实现互换交易价格精度控制功能 init
- 添加 swapPricePrecisionHelper.js 工具类处理价格精度格式化
- 新增 swappriceprecision.js 配置文件定义各类金融产品的精度规则
- 在 EodPositionRisks.cshtml 和 SwapIncome.cshtml 中引入新的价格格式化脚本
- 替换原有的价格格式化函数为基于产品类型的动态精度控制
- 移除旧的价格验证和标准化逻辑,改用新的精度控制机制
- 添加 vue-swap-price-input 组件用于精确的价格输入控制
- 更新 Controller 中的价格处理逻辑以支持新精度格式化方式
|
2026-07-29 09:44:04 +08:00 |
|
hjhan
|
422507df8d
|
fix(swaptrade): 新增交易切换标的时清空残留的净价/全价/收益率
setUnderlyingCode 在切换标的时仅调用 clearBondCalcFlags 清掉手动/源标志,未清字段值;getSpotPrice 只回填净价/全价,收益率(InitYtm)无刷新逻辑,导致旧债券收益率残留污染新债券。显式置空 PosiNetNoFeePrice/PosiGrossPrice/InitYtm,避免残留。
|
2026-07-28 18:53:57 +08:00 |
|
马冰冰
|
de84a90bad
|
fix: 国联民生-簿记中增强收益结构可以识别并且对应到交易确认书中
|
2026-07-28 18:25:03 +08:00 |
|