质量业务功能「全局切到 114 服务端」验证报告
生成时间:2026-08-25 | 目标:所有质量相关功能在云端 114 (.NET/SQLServer) 真实跑通
一、配置改动(根因修复)
.env 的 SCSAI 段由本地 :5000 改为 114(备份 .env.bak.20260825085235):
| 项 | 旧值(本地) | 新值(114) |
|---|---|---|
| SCSAI_SERVER | http://localhost:5000 | https://ylxt.chat/scplm |
| SCSAI_DATABASE | SCPLM_CLOUD_20260813 | SCPLM |
| SCSAI_USERNAME | admin | root |
| SCSAI_PASSWORD | innovator | gyc123456;(尾分号不可省) |
| SCSAI_ENDPOINT_PATH | /server/SCSAIServer.aspx | /server/InnovatorServer.aspx |
代码口径同步对齐 114(quality-inspection.js / inventory.js / vendor.js / change.js 回退默认,
quality.js 注释),避免配置缺失时静默回退到本地库。
二、重启服务
停掉仍占用 3006、加载旧配置的旧进程(PID 30128),以 env -u http_proxy ... PORT=3006 node server.js
重启(绕本机 HTTP_PROXY=127.0.0.1:10809,否则 114 请求会被本地代理拦截)。启动日志:
✅ SCSAI 连通正常 (https://ylxt.chat/scplm,, DB: SCPLM)。
三、验证结果(实测,非推测)
3.1 线上 API(:3006)数据来源已切到 114
GET /api/quality-inspection/ncrs→{"success":true,"source":"SCSAI","total":3,...}GET /api/quality/kpi→NCR_TOTAL:3, data_source:"scsai"(此前本地库返回 21)
3.2 verify_114_quality.cjs(强制 114)逐项 PASS
| 检查项 | 结果 |
|---|---|
| 8 个质量 ItemType 可查 | 7 有数据;CASC211_JG_EXAMINE_ITEM 类型存在但 0 条 |
| NCR 创建 + 删除 写路径 | ✅ ok |
| ncr-worker run() | ✅ total=3(SCSAI NCR QS) |
| capa-worker run() | ✅ total=3(SCSAI QCA QS) |
| audit-worker run() | ✅ total=1(SCSAI Audit QS) |
| qcc-worker run() | ✅ 1 张卡(SCSAI Q_CONTROL_CARD MES,只读监控) |
| spc-worker run() | ✅ 15 特性(SCSAI Characteristic) |
| stat-worker run() | ✅ 实时聚合 KPI |
| fmea-worker run() | ✅ DFMEA=2 / PFMEA=1 |
注:114 不支持 ValidateUser(ItemNotFoundException),但真实 Basic 鉴权生效(查询/写入均成功),非阻断。
四、QCC 质控卡「创建」缺口已定位并修复(实测 PASS)
4.1 根因(非服务端建模约束,而是 AML 标签大小写敏感)
- 114 上
CASC211_JG_Q_CONTROL_CARD的taskitemid是普通 property(真实名全小写taskitemid,
data_type=decimal,is_required=1)。Aras 按 XML 元素名精确匹配 property(大小写敏感),
之前 QCC 创建未传该字段 / 标签名大小写不符 → 值被丢弃 → INSERT 该列 NULL → NOT NULL 报错。
- 对照实证(114 直连):
- 大写
→999001 不能将值 NULL 插入列 'TASKITEMID'(失败) - 小写
→ 创建成功,可删除清理999001 - 合法性佐证:现存卡的
taskitemid真实值为"0"(服务端默认填 0);114 上
JG_PRODUCE_TASK/CASC211_JG_PRODUCE_TASK 查询 count=0 → taskitemid 不是外键,
是任意非空 decimal 即可满足约束(与现存卡 0 一致最安全)。
4.2 修复(qcc-worker.js)
create/seed 分支构造 cardData 时显式补 taskitemid(小写键),值优先级:
params.cardData.taskitemid → params.cardData.TASKITEMID(兼容大写)→ 默认 "0"(与 114 现存数据一致)。
经 CapabilityRuntime.create → unified-create,data 的 key 原样当 XML 标签 → 小写 taskitemid 被正确识别写入。
4.3 端到端实证(真实代码路径,114)
server/scripts/e2e_qcc_create.cjs:require 新 worker 跑 run({action:'seed', withItem:false})
- 结果:
success:true, created_id=5FA33C3679FE403FB03759A2BADC1790,清理删除success:true - 证明 QCC 质控卡创建已通过真实代码路径在 114 跑通。
- 重启运行实例(PID 29892)加载新 worker 代码;线上
GET /api/quality/kpi仍来自 114(NCR_TOTAL=3, data_source=scsai)。
五、遗留与验证资产
- 本地 :5000 历史测试 NCR 残留已不再影响(真源改为 114),可按需清理。
- 验证脚本(保留,可复跑):
server/scripts/verify_114_quality.cjs— 7 质量员工 run() + NCR 写路径(强制 114)server/scripts/e2e_qcc_create.cjs— QCC 创建经真实代码路径在 114 跑通(自动清理)
BossAgents