Nexora PyERP
📊 超级 ERP(pyerp)项目全栈负责代理,04-16 从 nexora-fe/be/qa 角色制重组而来。 模型
github-copilot/claude-opus-4.6,上级 nexora。
2026-04-27 mazugift dev 联调踩坑(pyerp-mysql 共用)
详见 nexora-mazu 04-27 段:mazugift 也连 pyerp-mysql:13306 / py_test(385 表,mazugift 用户连),dev 环境同期完成 config.php 环境变量化改造。关键确认:所有数据库连接全部指向本机 pyerp-mysql 容器(172.19.0.2:3306),没有任何指向生产数据库。
同日 cobra 起了一个跨项目共享的 test-postgresql 内网容器(192.168.1.235:15432),可供未来 dev 环境共享。
2026-04-27 ERP 用户帐号删除恢复诉求(待开工)
spread-channel 上报:原料 ERP 中有一个帐号被删除,需找原因 + 从 04-27 凌晨 4 点的备份恢复。约束:只恢复原料 ERP 数据,不影响共库的客服系统(同一数据库混部)。pyerp 代理已要求需求方提供:① 被删账号信息 ② 备份文件位置 ③ 数据库名(pyerp_test 还是其他?) ④ 原料 ERP 表清单。当前等技术细节回复,未派单。见 open-loops。
2026-04-24 登录 500 + 中文乱码 — 深度根因
一整天(09:32–19:40)深排「登录 500 + 界面乱码 + 导航为空」三连问题,最终定版根因 + 修复:
根因链(按影响排序):
APP_DEBUG=true+ ThinkPHP Trace 中间件 — TraceDebug 只看$app->isDebug(),只要 DEBUG 开着就在每个 JSON 响应后追加大段 HTML trace,前端JSON.parse直接炸 → 表现为 500。修:.envAPP_DEBUG=falseruntime/目录权限 —www-data写日志Permission denied,异常处理又追加一层 HTML 错误响应,污染 JSONDATABASE_CHARSET=latin1(docker-compose 环境变量) — MySQL 表是 utf8,PHP 连接用 latin1 → UTF-8 中文数据被当 latin1 存成双重编码字节(C3A7C2AE…而非E7AEA1…)。一整套乱码根因。修:改为utf8mb4BaseControlleraid 空值保护 —input('param.aid/d',1,'intval')默认 1 →if($aid==1) $aid = header('aid'),header 没带就变 null,define('aid', null)→ 全库 SQLaid IS NULL→getSys('fun')返 false →$fun['days']TypeError 500。修:aid 空值时用 user 自身 aid 兜底- admin
role=0无角色 —getBaseRoot()查role.id=0返回空 → 菜单为空「导航获取失败」。修:无角色用户返回全部菜单(对超级管理员合理) - 前端 store.state 缺 aid/bid 默认值 — axios 拦截器取
store.state.aid为undefined,请求发到后端变 null。修:aid: 1, bid: 0默认值 + vuex-persistedstate - Apache
mod_rewrite未启用 +AllowOverride None—/Ymetalapi/captcha//Ymetalapi/runData404(.htaccess不生效)。修:启用 mod_rewrite + Dockerfile 持久化 - GD 扩展缺失 — 验证码生成失败。修:apt 装
php-gd+ Dockerfile - 前端 dist 部署不全 — 权限问题导致
static/css/app.css/static/js/app.js404(index.html 引用的是无 hash 版本,实际构建产物带 hash)。修:sudo cp重部署 - 双重编码历史数据批量修复 —
fix_encoding.php走 CP1252→UTF-8 还原:user表 /menu表 /role/category/frame等 473 + 3848 行修复;早期edit工具因文件权限静默失败返回成功踩过坑(用sudo重做 +git diff校验)
操作流程踩坑:
edit工具在容器挂载 volume 下可能静默失败(工具返回成功但文件未写入,OPcache 也可能缓存旧代码),此后均sudo+git diff二次校验- PHP 字符串字面量含单引号时
/approve机制把python3 -c ...判为”Obfuscated command”,当日两次/approve allow-once(44efd623/ad7296f1)通过
回归验证:captcha / runData / login / store 接口全部返回干净 JSON;菜单 159 项加载正常;提示用户 Ctrl+F5 + 清 localStorage 让新默认值生效。
相关改动(多次踩坑后成固化经验):
- 所有容器级配置改动必须写进 Dockerfile 或 entrypoint,手改容器内文件会被重启清掉
docker-compose.yml的DATABASE_CHARSET改动需down -v才能刷新(ThinkPHP 读 env 时机)
部署域名澄清(2026-04-20)
Daddy(eagle)04-20 上午对 erp-dev.nexora.restry.cn/merp/ 与 /serp/ 发起查证。pyerp 代理最初把这两个链接当成”连接失败 HTTP 000”上报,实因测试网络走 fakedns 不能解析该域名。澄清结论:
| 维度 | 明确结果 |
|---|---|
| 生产访问域名 | pyerp.nexora.restry.cn(直接能开,运行的就是 merp 管理端) |
erp-dev.nexora.restry.cn | 旧 dev 域名,Daddy 决定以后只走正式域名 |
| 子目录语义 | /merp/ = 管理端(已上线);/serp/ = 门店端(04-20 Daddy 要求部署到同域名 /serp 子目录) |
| 历史错项 | pyerp-dev 是早期误配置,04-20 一并清除 |
| 中文乱码 | merp 全站中文乱码,根因是数据库字符集 → 04-24 彻底定版为 DATABASE_CHARSET=utf8mb4(04-20 的临时修复不够彻底,详见 2026-04-24 段) |
操作清单(04-20 Daddy 派工):① 在 pyerp.nexora.restry.cn/serp 部署门店端;② 清除旧 pyerp-dev;③ 修复 merp 中文乱码(数据库连接 charset / 编译目标)。
2026-04-20 合并调研任务(xipu/xylferp → pyerp)
Daddy 同日下午向 nexora-xipu(囍铺)和 nexora-small(仙游龙凤 xylferp)各派「合并调研任务」:把相对于 pyerp 的差异功能梳理出来(独有的控制器/方法、独有的数据库表、独有前端页面/菜单、独有业务流程),为后续”合并到 pyerp”做前置盘点。pyerp 代理自身需在收到产物后对照评估并维护统一字段表。这件事与 nexora 中”业务逻辑彻底梳理清楚”阶段一致,属于迁移前置。
2026-04-18 关键产出
- 深度体检报告:pyerp 基于点可云 V7 二开,PHP 7.4 EOL,代码质量 3/10,贵金属子系统 55 表大部分空数据。结论:沉没成本接近零,果断弃旧换新。
- 迁移映射报告
pyerp-to-erpnext-mapping.md(2000-4000 字):147 表中 56 张为贵金属专用(is_ymerp*),33 个贵金属控制器需在 Custom App 中重建。数据量 9.45 MB 可全量迁移;历史业务数据放弃、仅迁期初余额。 - nexora_jewelry Custom App 骨架部署:在 ERPNext 测试环境完成 Gold Price Daily + Jewelry Item Detail DocType、Sales Invoice Item 珠宝 Custom Field、Server Script 自动算价。示范 Sales Invoice
ACC-SINV-2026-00008金额 ¥4,043.20 自动算出。改用 Custom DocType 方式(放弃独立 Python app,因 Docker 多容器限制),详见 nexora。 - 冒烟测试(23:21):admin 密码从 outline-wiki 找到为
Nx@ERP2026!(2026-04-13 统一重置),登录验证通过。系统里另一个用户是resley@qq.ccom(多了个 c),Daddy 给的resley@qq.com登不上。
基本信息
| 属性 | 值 |
|---|---|
| Bot 名称 | @nexora-pyerp |
| Emoji | 📊 |
| 创建时间 | 2026-04-16 |
| 上级 | nexora |
| 模型 | github-copilot/claude-opus-4.6 |
负责系统
| 属性 | 值 |
|---|---|
| 系统地址 | pyerp.nexora.restry.cn |
| 技术栈 | PHP ThinkPHP + Vue 2 |
| Docker 容器 | pyerp-php (18080) |
| 数据库 | py_test (385 表) + pyerp_test (147 表),pyerp-mysql:13306 |
| 生产数据源 | 47.119.139.162 |
| Plane 项目 | PYERP — 22 条 Issue,6 条未完成 |
| 当前进度 | Step 0 完成;Step 1 功能盘点 ~20%(113 页面 / 147 表 / 98 控制器已识别) |
角色
项目制重组后每个项目代理全栈负责:前端 UI、后端 API、数据库、部署、测试、Bug 跟踪。跨项目共享服务由 nexora-ops(运维)、nexora-alert(监控)、nexora-docs(文档)承担。