统一个人测算入参与重启脚本进程识别

This commit is contained in:
wkc
2026-04-10 15:04:56 +08:00
parent f001047d0c
commit fa0b446699
46 changed files with 903 additions and 87 deletions

View File

@@ -181,7 +181,7 @@
- 下拉选项:`consumer``business`
- `loanTerm`
- 固定年限下拉
- 选项按 Excel 的 `1/2/3/4/5/6……` 组织
- 选项固定为 `1/2/3/4/5/6`
同时修正:
@@ -307,12 +307,12 @@
- 提交流程后详情页能回显 `loanPurpose``loanTerm`
- 验证完成后停止本次启动的前后端进程
## 9. 确认项
## 9. 确认项
- 当前代码中的 `orgCode` 默认值`892000`
- `ModelInvokeDTO` 注释中写的是固定值 `931000`
本次设计不擅自调整该默认值,保持现有运行逻辑,待业务另行确认后再处理。
- `orgCode` 统一`892000`
- `ModelInvokeDTO` 注释已统一为 `892000`
- 数据库 `loan_pricing_workflow.org_code` 默认值已统一为 `892000`
- 存量 `loan_pricing_workflow.org_code` 数据已通过迁移脚本统一为 `892000`
## 10. 非目标

View File

@@ -92,7 +92,7 @@ git commit -m "新增个人测算输入参数前端断言"
```vue
<el-form-item label="借款期限(年)" prop="loanTerm">
<el-select v-model="form.loanTerm" placeholder="请选择借款期限" style="width: 100%">
<el-option v-for="item in loanTermOptions" :key="item" :label="item" :value="item" />
<el-option v-for="item in ['1', '2', '3', '4', '5', '6']" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
```

View File

@@ -32,10 +32,12 @@
| idNum | String | 否 | 证件号码 |
| guarType | String | 是 | 担保方式,可选值: 信用/保证/抵押/质押 |
| applyAmt | String | 是 | 申请金额,单位: 元 |
| bizProof | String | | 是否有经营佐证,值: true/false |
| loanLoop | String | | 循环功能,值: true/false |
| collType | String | 否 | 抵质押类型,可选值: 一线/一类/二类 |
| collThirdParty | String | 否 | 抵质押物是否三方所有,值: true/false |
| loanPurpose | String | | 贷款用途,可选值: consumer/business |
| loanTerm | String | | 借款期限(年),固定下拉选项按模型文档配置 |
| bizProof | String | 否 | 是否有经营佐证,值: 0/1 |
| loanLoop | String | 否 | 循环功能,值: 0/1 |
| collType | String | 否 | 抵质押类型,可选值: 一类/二类/三类 |
| collThirdParty | String | 否 | 抵质押物是否三方所有,值: 0/1 |
**请求示例:**
@@ -47,10 +49,12 @@
"idNum": "110101199001011234",
"guarType": "抵押",
"applyAmt": "500000",
"bizProof": "true",
"loanLoop": "false",
"loanPurpose": "business",
"loanTerm": "3",
"bizProof": "1",
"loanLoop": "0",
"collType": "一类",
"collThirdParty": "false"
"collThirdParty": "0"
}
```
@@ -64,12 +68,14 @@
"id": 1,
"modelOutputId": 100,
"serialNum": "20250119143025123",
"orgCode": "931000",
"orgCode": "892000",
"runType": "1",
"custIsn": "CUST001",
"custType": "个人",
"guarType": "抵押",
"applyAmt": "500000",
"loanPurpose": "business",
"loanTerm": "3",
"custName": "张三",
"idType": "身份证",
"createTime": "2025-01-19 14:30:25",
@@ -136,7 +142,7 @@
"id": 2,
"modelOutputId": 101,
"serialNum": "20250119143125456",
"orgCode": "931000",
"orgCode": "892000",
"runType": "1",
"custIsn": "CORP001",
"custType": "企业",
@@ -189,7 +195,7 @@ GET /loanPricing/workflow/list?pageNum=1&pageSize=10&custName=科技
"id": 1,
"modelOutputId": 100,
"serialNum": "20250119143025123",
"orgCode": "931000",
"orgCode": "892000",
"custIsn": "CUST001",
"custType": "企业",
"guarType": "抵押",
@@ -240,7 +246,7 @@ GET /loanPricing/workflow/20250119143025123
"id": 1,
"modelOutputId": 100,
"serialNum": "20250119143025123",
"orgCode": "931000",
"orgCode": "892000",
"runType": "1",
"custIsn": "CUST001",
"custType": "企业",

View File

@@ -0,0 +1,30 @@
# 2026-04-09 默认切换 Node 25 以支持 Playwright 实施记录
## 变更内容
-`nvm` 默认别名从 `14` 调整为 `25`
- 清理了本次验证过程中残留的 Playwright 浏览器安装进程
## 执行命令
- `zsh -lic 'nvm alias default 25'`
## 变更结果
- 新开的交互式 `zsh` 默认 Node 版本变为 `v25.9.0`
- 默认 npm/npx 版本变为 `11.12.1`
## 验证结果
- `zsh -lic 'node -v && npm -v && npx -v && nvm current && nvm alias default'`
- `node v25.9.0`
- `npm 11.12.1`
- `npx 11.12.1`
- `nvm current = v25.9.0`
- `default -> 25 (-> v25.9.0 *)`
- `zsh -lic '... playwright_cli.sh --help'`
- Playwright CLI 帮助输出正常
- `zsh -lic '... playwright_cli.sh --session verify-default-25 open https://example.com && snapshot && close && list'`
- 页面成功打开
- 页面标题为 `Example Domain`
- 快照成功输出
- 浏览器关闭后 `list` 返回 `(no browsers)`
## 结论
- 默认 shell 环境下已可直接使用 Playwright无需再先手动执行 `nvm use 25`

View File

@@ -0,0 +1,30 @@
# 2026-04-09 安装 Node 25 与 Node 14 实施记录
## 变更内容
- 使用 `nvm` 安装 `node v25.9.0`
- 使用 `nvm` 安装 `node v14.21.3`
- 调整 `/Users/wkc/.npmrc`,删除与 `nvm` 冲突的 `prefix=~/.npm-global`
- 保留 npm 镜像配置:`registry=https://registry.npmmirror.com`
## 处理过程
- `node 25` 通过 `nvm` 正常安装成功
- `node 14` 在 Apple Silicon 原生环境下无法直接下载 `darwin-arm64` 安装包
- 原生源码编译 `node 14` 失败,错误来自当前 macOS Command Line Tools/SDK 与旧版 `node 14` 源码不兼容
- 改为通过 Rosetta 以 `x64` 方式安装 `node 14`,安装成功
## 验证结果
- `zsh -lic 'nvm use 25 && node -v && npm -v'` 验证结果:
- `node v25.9.0`
- `npm 11.12.1`
- `zsh -lic 'nvm use 14 && node -v && npm -v'` 验证结果:
- `node v14.21.3`
- `npm 6.14.18`
- `arch -x86_64 /bin/zsh -lic 'nvm use 14 && node -v && npm -v'` 验证结果:
- `node v14.21.3`
- `npm 6.14.18`
- 新开的交互式 `zsh` 默认版本:
- `node v14.21.3`
- `npm 6.14.18`
## 备注
- `nvm` 当前默认别名已指向 `14`

View File

@@ -0,0 +1,25 @@
# 2026-04-09 Node 卸载与 nvm 安装实施记录
## 变更内容
- 卸载了 Homebrew 安装的 `node 25.8.1_1`
- 删除了本地目录 `/Users/wkc/.local/node-v14.21.3-darwin-x64`
- 更新了 `/Users/wkc/.zshrc`
- 安装了 `nvm 0.40.4`
## shell 配置调整
- 删除旧配置:`export PATH="/Users/wkc/.local/node-v14.21.3-darwin-x64/bin:$PATH"`
- 新增 `nvm` 初始化配置:
```sh
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"
```
## 验证结果
- 交互式 `zsh``nvm --version` 返回 `0.40.4`
- `node` 命令已不存在,说明当前环境中已无非 `nvm` 管理的 Node 版本
- `nvm ls` 返回 `N/A`,说明尚未通过 `nvm` 安装任何 Node 版本
## 备注
- `brew uninstall node` 过程中触发了 Homebrew 自动移除若干仅供该版本 Node 使用的依赖库

View File

@@ -0,0 +1,25 @@
# 证件输入校验移除实施记录
## 实施时间
- 2026-04-09
## 修改内容
- 移除个人新增弹窗中的证件号码格式校验
- 移除企业新增弹窗中的证件号码格式校验
- 两个新增弹窗的证件号码规则统一保留为必填校验
- 新增前端源码断言,约束后续不再恢复证件号码格式校验
## 修改文件
- `ruoyi-ui/src/views/loanPricing/workflow/components/PersonalCreateDialog.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/CorporateCreateDialog.vue`
- `ruoyi-ui/tests/id-number-validation-removal.test.js`
- `ruoyi-ui/package.json`
- `doc/implementation-report-2026-04-09-remove-id-number-validation.md`
## 验证方式
1. `npm --prefix ruoyi-ui run test:id-number-validation-removal`
2. `npm --prefix ruoyi-ui run build:prod`
## 说明
- 本次移除的是前端证件号码格式校验,不影响证件号码必填约束
- 后端本次未新增或调整证件号码格式校验逻辑

View File

@@ -0,0 +1,93 @@
# 上虞个人利率测算输入参数对齐实施记录
## 实施时间
- 2026-04-09
## 修改内容
- 个人新增弹窗补齐 `loanPurpose``loanTerm`
- 个人新增弹窗 `loanTerm` 固定为 `1-6`
- 个人新增弹窗 `collType` 选项统一为 `一类/二类/三类`
- 个人新增弹窗开关字段提交值由 `true/false` 调整为 `1/0`
- 个人详情页补齐 `贷款用途` 展示
- 个人与企业详情、模型输出布尔展示兼容 `1/0`
- 后端个人创建 DTO 补齐 `loanPurpose``loanTerm`
- 后端个人 DTO 到流程实体映射补齐 `loanPurpose``loanTerm`
- 后端模型调用 DTO 补齐 `loanTerm``loanLoop`
- 后端个人模型调用前统一将 `bizProof``loanLoop``collThirdParty` 规范为 `0/1`
- `orgCode` 统一为 `892000`
- `ModelInvokeDTO` 注释、接口文档、SQL 基线和迁移脚本同步统一为 `892000`
- 新增前端源码断言与后端单元测试
## 修改文件
- `ruoyi-ui/src/views/loanPricing/workflow/components/PersonalCreateDialog.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/PersonalWorkflowDetail.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/ModelOutputDisplay.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/CorporateWorkflowDetail.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/CorporateCreateDialog.vue`
- `ruoyi-ui/tests/personal-create-input-params.test.js`
- `ruoyi-ui/package.json`
- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/PersonalLoanPricingCreateDTO.java`
- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/ModelInvokeDTO.java`
- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/util/LoanPricingConverter.java`
- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/LoanPricingModelService.java`
- `ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/LoanPricingModelServicePersonalParamsTest.java`
- `doc/api/loan-pricing-workflow-api.md`
- `sql/loan_pricing_workflow.sql`
- `sql/loan_pricing_schema_20260328.sql`
- `sql/loan_pricing_prod_init_20260331.sql`
- `sql/fix_comments.sql`
- `sql/fix_all_comments.sql`
- `sql/update_org_code_default_20260409.sql`
- `doc/2026-04-09-shangyu-retail-input-params-design.md`
- `doc/2026-04-09-shangyu-retail-input-params-frontend-plan.md`
- `doc/implementation-report-2026-04-09-shangyu-retail-input-params.md`
## 数据库处理
1. 执行 `sql/update_org_code_default_20260409.sql`
2.`loan_pricing_workflow.org_code` 默认值修改为 `892000`
3. 将存量 `loan_pricing_workflow.org_code``892000` 的记录统一更新为 `892000`
## 验证方式
1. 前端源码断言:
- `npm --prefix ruoyi-ui run test:personal-create-input-params`
- `npm --prefix ruoyi-ui run test:retail-display-fields`
2. 后端单元测试:
- `mvn -pl ruoyi-loan-pricing -Dtest=LoanPricingModelServiceTest,LoanPricingModelServicePersonalParamsTest test`
3. 前端构建:
- `npm --prefix ruoyi-ui run build:prod`
4. 数据库验证:
- 查询 `loan_pricing_workflow.org_code` 字段默认值
- 查询存量数据中是否仍存在非 `892000` 记录
5. 接口验证:
- `/login/test` 获取 token
- `POST /loanPricing/workflow/create/personal` 正常场景
- `POST /loanPricing/workflow/create/personal` 缺少 `loanPurpose` 场景
- `POST /loanPricing/workflow/create/personal` 分支值场景
- `GET /loanPricing/workflow/{serialNum}` 验证回显
6. 页面验证:
- 启动前端 dev server
- 使用浏览器打开流程列表页
- 校验新增弹窗下拉选项
- 页面创建个人流程并打开详情页确认回显
## 验证结果
- `npm --prefix ruoyi-ui run test:personal-create-input-params` 通过
- `npm --prefix ruoyi-ui run test:retail-display-fields` 通过
- `mvn -pl ruoyi-loan-pricing -Dtest=LoanPricingModelServiceTest,LoanPricingModelServicePersonalParamsTest test` 通过
- `npm --prefix ruoyi-ui run build:prod` 通过,输出 `Build complete.`
- 数据库验证结果:
- `loan_pricing_workflow.org_code` 默认值为 `892000`
- 存量非 `892000` 记录数为 `0`
- 接口验证结果:
- 正常场景创建成功,返回 `orgCode=892000`,并持久化 `loanPurpose``loanTerm`
- 缺少 `loanPurpose` 时返回 `贷款用途不能为空`
- 分支场景详情回显 `bizProof=0``loanLoop=1``collThirdParty=0`
- 页面验证结果:
- 新增弹窗显示 `贷款用途`
- 借款期限下拉仅包含 `1-6`
- 抵质押类型下拉为 `一类/二类/三类`
- 页面创建流程成功后,详情页展示 `贷款用途=经营``借款期限=6`
## 说明
- 浏览器验证使用系统 `Google Chrome.app`
- 本次验证期间启动的后端、前端和浏览器进程已在任务结束前关闭

View File

@@ -0,0 +1,26 @@
# 启动脚本进程判断改为 ps -ef 实施记录
## 修改内容
-`bin/prod/restart_java.sh` 中的后端进程收集逻辑由 `pgrep -f` 改为 `ps -ef | awk`
-`bin/restart_java_backend.sh` 中的后端进程收集逻辑由 `pgrep -f` 改为 `ps -ef | awk`
- 删除 `bin/restart_java_backend.sh` 中对 `pgrep` 命令的依赖校验
- 更新 `bin/prod/restart_java_test.sh`,补充 `ps -ef` / `pgrep` 约束校验,并修正测试夹具中的 JDK 目录
- 新增 `bin/restart_java_backend_test.sh`,校验本地后端重启脚本已改用 `ps -ef`
## 实现说明
- 两份脚本都只在 `ps -ef` 结果中匹配同时满足“包含脚本标记参数”和“`-jar` 指向目标 jar”这两个条件的 Java 进程
- 进程筛选时继续忽略 `<defunct>` 记录,避免误判僵尸进程
- 现有 PID 文件校验逻辑保持不变,本次只收敛“扫描当前是否已有进程”的实现方式
## 路径检查
- 已确认本次实施记录保存路径为 `doc/implementation-report-2026-04-09-start-script-ps-ef.md`
## 验证结果
- 已执行 `sh bin/prod/restart_java_test.sh`
- 已执行 `sh bin/restart_java_backend_test.sh`
- 已执行 `sh -n bin/prod/restart_java.sh && sh -n bin/restart_java_backend.sh`
- 已确认测试中拉起的假 Java 进程在脚本收尾阶段自动停止并清理

View File

@@ -0,0 +1,37 @@
# 2026-04-10 登录 Shell 默认使用 Node 25 实施记录
## 变更内容
- 保持 `nvm` 默认别名为 `25`
-`~/.zprofile` 中补充 `nvm` 初始化,并在登录 shell 启动时自动执行 `nvm use default`
## 根因分析
- `nvm alias default 25` 已经存在,但仅在交互式 shell 中可用
- `zsh -lc` 启动的是登录非交互 shell不会读取 `~/.zshrc`
- 因此这类场景下 `node``npm``npx` 未进入 PATH表现为 `npx` 启动失败
## 修改文件
- `~/.zprofile`
- `doc/implementation-report-2026-04-10-login-shell-default-node25.md`
## 验证项
- 验证登录 shell 在不手动执行 `nvm use` 的情况下可直接识别 `node`
- 验证登录 shell 在不手动执行 `nvm use` 的情况下可直接识别 `npx`
- 验证 `nvm` 默认别名仍然指向 `25`
## 执行命令
- `zsh -lc 'nvm alias default 25'`
- `zsh -lc 'echo NODE=$(node -v); echo NPM=$(npm -v); echo NPX=$(npx -v); echo NODE_PATH=$(command -v node); echo NPX_PATH=$(command -v npx); echo NVM_CURRENT=$(nvm current); echo NVM_ALIAS=$(nvm alias default | tail -n 1)'`
## 验证结果
- `nvm` 默认别名输出为 `default -> 25 (-> v25.9.0 *)`
- 登录 shell 输出 `NODE=v25.9.0`
- 登录 shell 输出 `NPM=11.12.1`
- 登录 shell 输出 `NPX=11.12.1`
- 登录 shell 输出 `NODE_PATH=/Users/wkc/.nvm/versions/node/v25.9.0/bin/node`
- 登录 shell 输出 `NPX_PATH=/Users/wkc/.nvm/versions/node/v25.9.0/bin/npx`
- 登录 shell 输出 `NVM_CURRENT=v25.9.0`
- 登录 shell 输出 `NVM_ALIAS=default -> 25 (-> v25.9.0 *)`
## 结论
- `zsh -lc` 场景下已默认切换到 Node `25.9.0`
- `npx` 在登录 shell 中已可直接使用,无需先手动执行 `nvm use 25`

Binary file not shown.

Binary file not shown.