2026-10-28 11:14:17 +08:00

291 lines
114 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- 2026-10-03:修复云端批量导入账号失败;根因是同一 FileReader 连续发起 ArrayBuffer 与文本读取触发 InvalidStateError,已移除重复读取、重建 gzip 并平滑重载;无落库接口回归、公网下发文件比对、服务与 HTTP 探针通过,备份 `/home/ubuntu/dy-backups/user-import-fix-20261003_175716/`,Git提交 `dca38d5`,未操作11.79生产;训练记录:`训练记录/2026-10-03-云端批量导入账号失败修复.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-10-02:完整扫描钉盘出库904个、库存1755个CSV;两端补录2026-10-01旺店通出库各1937条/47086件、2026-10-02库存21仓/21766条,8.186另补录历史250条及近期清洗造成的40个组合行级差异;最终组合缺口0,最新库存可用47121084、生产在途1799959、采购在途12209180,两端缓存各刷新11个模块,服务和HTTP核验通过,备份在本地 `dy-dashboard/backups/dingtalk_sync_20261002/` 与云端 `~/dy-backups/dingtalk_sync_20261002/`,未操作11.79;训练记录:`训练记录/2026-10-02-钉盘库存与日出库更新到8.186和云端.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-10-01:完整扫描钉盘出库903个、库存1734个CSV;两端补录2026-09-30旺店通出库各1949条/46581件,云端补录2026-10-01库存21仓,8.186另补录历史250条;最终组合缺口0,10月1日库存21743条,两端缓存各刷新11个模块,服务和HTTP核验通过,备份在本地 `dy-dashboard/backups/dingtalk_sync_20261001/` 与云端 `~/dy-backups/dingtalk_sync_20261001/`,未操作11.79;训练记录:`训练记录/2026-10-01-钉盘库存与日出库更新到8.186和云端.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-30:完整扫描钉盘出库902个、库存1713个CSV并同步8.186与云端;8.186补录出库3760条/库存21708条,云端补录出库3510条/库存21708条,另补回测试端清洗造成的241条行级缺口;最终组合缺口和行级行数差异均为0,备份在本地 `dy-dashboard/backups/dingtalk_sync_20260930/` 与云端 `~/dy-backups/dingtalk_sync_20260930/`,缓存、服务、HTTP核验通过,未操作11.79;训练记录:`训练记录/2026-09-30-钉盘库存与日出库更新到8.186和云端.md`。
- 2026-09-29:完整扫描钉盘出库18页/893项、库存34页/1692项;最终两端出库和库存组合缺口均为0,09-01以来逐组合行数及数量差异0。最新出库2026-09-28、库存2026-09-29,最新库存21679条/21仓,可用库存45939555;本次切片无空编码、NA、N/A、合计。两端缓存已刷新,测试端与云端服务及HTTP探针通过;未操作11.79生产。 备份:本地`backups/dingtalk_sync_20260929/`、云端`~/dy-backups/dingtalk_sync_20260929/`;训练记录:`2026-09-29-钉盘库存与日出库更新到8.186和云端.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-28:生成计划预测货品库存及出库明细表,包含2,509个货品、43列,覆盖指定基础字段、08-29至09-27出库汇总及1至35号仓库存;出库合计2,152,677、仓库明细合计8,424,762,独立复核一致;文件 `计划预测货品库存及出库明细_20260928.xlsx` 已上传钉盘“我的文档”;随后按要求修正2,171条成本价,非零2,446条、零63条,库存出库合计不变,新版435,109字节已覆盖上传原文件并回查正常,未修改数据库。训练记录:`2026-09-28-计划预测货品库存及出库明细表.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-25:执行8.186→云端→11.79两阶段部署。第一阶段已完成:云端部署前备份代码7.2M、数据库104M到 `~/dy-backups/stage1-pre-sync-20260925_120500/`;同步功能代码与知识库,结构核对测试985列、云端986列,云端独有 `finished_products.待提数量` 保留,无需DDL;全表行数部署前后0处变化,缓存刷新、服务active、内外网HTTP 200、下发app.js哈希一致。第二阶段云端项目包76M、数据库包104M已生成并下载到本机,51个CREATE TABLE且feedback为0,MD5和压缩校验通过;11.79连续探测为FAILED/No route to host,无法先做生产备份,故未升级生产。训练记录:`2026-09-25-8.186到云端部署及11.79升级阻塞.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-25:完成钉盘库存与日出库同步。全量扫描出库18页857个CSV、库存33页1650个CSV;两端同步32个最新源文件,新增出库3532条、库存21552条,补回8.186启动清洗少的12条,并补录测试端历史2026-06-23 jdgj 250条;本地备份 `backups/dingtalk_sync_20260925/`,云端备份 `~/dy-backups/dingtalk_sync_20260925/`,两端刷新11个缓存模块、服务及HTTP核验通过,未操作11.79生产。训练记录:`2026-09-25-钉盘库存与日出库更新到8.186和云端.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-24:按要求核对云端周淑珍、汤定毅角色,两人均已是 super_admin 且启用,无需重复写库;云端服务 active、内外网 HTTP 200;未操作11.79生产,训练记录:2026-09-24-云端周淑珍和汤定毅超级管理员核对.md。
- 2026-09-24:排查汤定毅无法编辑用户权限,确认账号角色原为 admin;按确认更新测试环境为 super_admin,接口验证成功,服务 active、本机与局域网 HTTP 200;未动代码、未操作云端和生产,训练记录:2026-09-24-汤定毅超级管理员权限修复.md。
- 2026-09-24:修复云端下单备份软管供应商错配。确认 `POZ-JMR-1909-PDD-RG` 的名称字段与BOM供应商均为广州永禾塑业有限公司,但旧供应商编码 `VEN00432` 指向广州恒泰莱包装科技有限公司;下单旧逻辑按编码优先导致备份显示恒泰莱。调整解析优先级为BOM供应商→物料名称供应商→回退值→编码绑定,将该物料编码修正为永禾 `VEN00131`,并把该商品3条历史下单备份软管简称由恒泰莱修正为永禾,残留错误0;包材订单供应商仍为广州永禾。云端服务平滑重载、本机及公网HTTP 200;测试服务重启、双地址HTTP 200。云端备份:`/home/ubuntu/dy-backups/purchase_supplier_fix_20260924_1600/`;Git提交 `a2ee5bf`;未操作11.79生产。训练记录:`工作指南/训练记录/2026-09-24-下单备份软管供应商错配修复.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-24:完成钉盘库存与日出库同步到8.186及云端。完整扫描日出库17页/846个文件、库存33页/1,629个文件;两端新增09-21两个店铺来源、09-22六个店铺来源及09-23旺店通出库3,560条,新增09-24库存21仓21,513条。查缺补漏为8.186补回06-23京东国际250条,并恢复09-01~09-21期间89个组合因清洗少的454行。最终两端钉盘组合缺口0、09-01以来逐组合行数及数量一致;09-24库存可用46,098,005、生产在途1,606,641、采购在途13,352,051。两端各刷新11个缓存模块,服务active且HTTP探针均200。备份:本地`backups/dingtalk_sync_20260924/`、云端`~/dy-backups/dingtalk-sync-20260924/`;未操作11.79生产。训练记录:`工作指南/训练记录/2026-09-24-钉盘库存与日出库更新到8.186和云端.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-23:将当前智能体工作区的 `AGENTS.md` 原样复制到 `/home/gxd/桌面/AGENTS.md`,逐字节比较确认与源文件一致;源文件未修改,未操作测试、生产或云端环境。训练记录:`工作指南/训练记录/2026-09-23-AGENTS文件复制到桌面.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dingtalk-assistant -->
- 2026-09-23:完成钉盘库存与日出库同步到8.186及云端。完整扫描出库17页/824个有效文件、库存33页/1,608个文件;两端新增09-21六个店铺来源及09-22旺店通出库(云端3,510条,8.186另补06-23京东国际250条,共3,760条),两端新增09-23库存21仓21,485条;查缺补漏再恢复8.186在09-01~09-20因清洗规则少的85组合/442行。最终两端钉盘组合缺口0、09-01以来出库行数一致,09-22旺店通2,081条/60,644件,09-23库存可用46,069,134、生产在途1,620,092、采购在途13,496,117;两端各刷11个缓存模块,服务和HTTP均200。备份:本地`backups/dingtalk_sync_20260923/`、云端`~/dy-backups/dingtalk-sync-20260923/`;未操作11.79生产。训练记录:`工作指南/训练记录/2026-09-23-钉盘库存与日出库更新到8.186和云端.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-23:重新生成遗失的 Codex 开发迁移包 `/home/gxd/桌面/dy-dashboard-codex-migration-20260922.tar.gz`。新包包含当前最新源码、测试、业务脚本、前端资源、Git 历史与 `CODEX_HANDOFF.md`,排除备份、venv、日志、缓存、临时目录、数据库/快照、CSV/Excel、上传产物及预压缩缓存;353,871,689 字节、5,572 个条目,gzip/关键目录/排除项校验通过,MD5 `31da3208aace6ff3e7dfcf6015762536`。原项目和服务未改动。训练记录:`工作指南/训练记录/2026-09-22-dy-dashboard迁移Codex打包.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-22:国内、海外、包材订单管理详情弹窗均展示可编辑的“计划下单日期”,并在后续布局修正中将“状态”统一移到左列,三类字段排列统一为左10项、右9项。JavaScript、三分支结构、gzip 缓存一致性与差异检查通过;8.186 测试服务 active,本机/局域网 HTTP 200,Git提交 `187165f`、`5d38b4e`。训练记录:`工作指南/训练记录/2026-09-22-三类订单详情计划下单时间可编辑.md`。未操作生产或云端环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-22:按旭东要求为 Codex 接续开发生成 `/home/gxd/桌面/dy-dashboard-codex-migration-20260922.tar.gz`,约337MiB(352,690,370 字节)、5,556个归档条目;保留源码、测试、业务脚本、前端资源与 Git 历史,排除备份、venv、日志、缓存、临时数据、数据库快照、CSV/Excel、上传导出产物及压缩运行缓存;加入 `CODEX_HANDOFF.md`,tar/gzip 与排除项校验通过,MD5 `9df554e749e59cd20fd94b85412d0070`。未删除原项目,未操作测试和生产环境。训练记录:`工作指南/训练记录/2026-09-22-dy-dashboard迁移Codex打包.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-22:按旭东要求读取钉盘最新库存与日出库并同步 8.186 测试系统与云端。钉盘全分页扫描(出库 17 页 830 文件、库存 32 页 1,587 文件;库存首扫第 3 页遇 MCP 网络错误,加重试后完整重扫)。缺口定位:出库 10 组合(09-19 tmgj、09-20 八店铺来源、09-21 wdt)、库存 21 组合(09-22 全 21 仓),两端缺口一致。两端切片备份后导入:出库 4,044 条、库存 21,448 条;修正了仓库前导零归一化导致 7 个仓漏导的问题后 09-22 齐 21 仓;31 个源文件两端 md5 全部一致,逐组合行数与件数两端完全一致,09-22 可用 45,795,993、生产在途 1,721,299、采购在途 12,515,335。两端各刷新 11 个缓存模块;8.186 用户级单元重启后 active 且本机/局域网 200,云端 kill -HUP 后 active 且本机/公网 HTTPS 200,日志无新错误。查缺补漏:云端组合缺口 0;8.186 存在 1 个组合缺口(2026-06-23 jdgj)与 74 个组合的行级差异(09-02~09-19 累计少 384 行,按来源固定差值 dyqsimelr 17、jdbz 4~6、jdsmj 3、tmgj 2、jdjwt 1、wdt 1~2),根因是 auto_clean「货品名称为空」删除规则(今日 08:00 自动化删 56 条),云端未跑该规则故完整。按不擅自改清洗规则与不擅自对账原则未改规则、未批量回填,已报告待旭东决定。钉盘无 2026-09-20 库存文件(来源未上传,不制造数据)。训练记录:`工作指南/训练记录/2026-09-22-钉盘库存与日出库更新到8.186和云端.md`。未操作 11.79 生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-21:按旭东要求生成 dy-dashboard 云端部署文档,并先实测核对目标环境后再落笔。环境实测:`ubuntu@82.156.135.91`、`/opt/dy-dashboard`(非 Git 仓库)、磁盘 40G 中 23G 已用/16G 可用(60%)、`dy-dashboard.service` active(MainPID 1271894)、Python 3.12.3、Gunicorn 18888、库 `dy_data`、52 张表。差异核对:代码需同步 15 项(`run.py`、`update_data.py`、`backup.sh`、5 个 routes、3 个 services、`static/js/app.js` 与 `.gz`);数据库结构无需迁移,云端多出 1 列 `finished_products.待提数量` 按规则保留,另发现两处仅列顺序差异。文档含授权边界、磁盘预检、备份与恢复、定向 rsync 同步、结构增量迁移、缓存与 app.js.gz、重载方式选择、三探针验证、回滚、故障速查、SSH 多行脚本约束。文档:`云端部署指南.md`;训练记录:`工作指南/训练记录/2026-09-21-云端部署文档编制.md`。未执行任何部署动作,未操作 11.79 生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-21:按旭东要求将业务项目 dy-dashboard 全部内容打包到桌面并排除每日备份。打包 `~/.openclaw/workspace/dy-dashboard`(总 18G,其中 `backups/` 占 18G),仅排除 `backups/` 目录,输出 `~/桌面/dy-dashboard-20260921-1828.tar.gz`(446M)。校验:归档 8,448 条、backups 相关条目 0;`app.py`、`routes/`(37)、`services/`(28)、`static/`(120)、`templates/`(6)、`venv/`(13)、`dy_data_v1.0.sql`、`backup.sh`、`pack_deploy_full.sh` 齐全;`gzip -t` 完整,MD5 `ce62e6f578f83cca9167b2fd0b5a1eb1`。未做任何删除,原项目保持原样。训练记录:`工作指南/训练记录/2026-09-21-dy-dashboard项目打包到桌面.md`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-21:制定智能体系统从 OpenClaw 迁移到 Codex 的方案(仅出计划,无任何部署动作)。实测盘点:OpenClaw 2026.9.4;配置 195 个代理但仅 4 个绑定钉钉在跑;203 个自动化任务中仅 9 个有业务价值,其余约 190 个为每周技能合集复审;会话库 155MB;技能 3 插件 + 7 自建 + 1 全局;MCP 1 个。核心结论:Codex CLI 是编码代理,无通道、调度、多代理、记忆、技能注入与控制面,整套平移不存在。方案 A(推荐):Codex 做大脑、OpenClaw 保留外壳,3–5 天零停机;方案 B:完全替换,需自建钉钉桥接、8 个 systemd timer、会话映射与失败告警,2–4 周。两条铁律:单一所有者;钉钉同一 clientId 不可两消费端并行。方案文档:`reports/2026-09-21-openclaw-to-codex-migration-plan.md`;训练记录:`工作指南/训练记录/2026-09-21-智能体从OpenClaw迁移到Codex方案.md`。未操作生产与云端环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dingtalk-assistant -->
- 2026-09-16:完成两阶段部署。第一阶段将8.186当前功能代码和完整知识库同步到云端82.156.135.91,结构对比无缺失表、字段或索引,未执行DDL、未导入测试数据;云端部署前后均为51张表、978个字段,日出库364,940条/9,798,012件,库存2,392,075条/可用库存4,877,598,502,数据未被覆盖。第二阶段从云端生成完整项目包62MB和全量数据库包125MB,先备份11.79生产项目79MB及数据库125MB并校验,再恢复云端全量数据和代码知识库。恢复后11.79与云端数据库51张表、978个字段及关键数据完全一致;两端缓存均已刷新,云端及11.79服务和HTTP验证通过。备份:云端`/opt/dy-dashboard_backups/stage1-20260916_120415/`,生产`/home/dieya/dy-dashboard_backups/stage2-before-20260916_120801/`。训练记录:`工作指南/训练记录/2026-09-16-云端与11.79两阶段完整部署.md`。已按要求操作11.79生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:按旭东要求读取钉盘最新日出库数据并同步8.186测试系统、云端82.156.135.91。完整扫描日出库目录16页、763个有效CSV,确认并导入缺失的2026-09-15旺店通文件2,086条、59,625件;两端目标切片已备份到`backups/outbound_gap_fill_20260916/`,两端缓存已刷新。8.186服务active且本机/局域网HTTP 200,云端平滑重载后本机/公网HTTP 200,重载日志无新增启动错误;两端数据一致。训练记录:`工作指南/训练记录/2026-09-16-钉盘日出库数据更新到8.186和云端.md`。未操作11.79生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:修复多个子菜单表头筛选输入关键词后候选项横向排列的问题,覆盖计划预测、待下单、下单备份、成品提货及国内/海外/包材订单等共用筛选入口,匹配项和清空搜索后的候选项统一纵向逐行排列。JavaScript、gzip、差异检查和轻量 DOM 断言通过;8.186测试服务重启后active,本机及局域网HTTP 200,Git提交 `f201ca7`。训练记录:`工作指南/训练记录/2026-09-16-表头筛选结果纵向排列修复.md`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:产品信息管理详情弹窗改为固定双栏表格布局,左右信息组各占50%,两侧标签列统一为118px,值列等宽并支持长文本换行,弹窗宽度固定为920px且窄屏可横向查看。JavaScript、gzip、DOM/CSS结构和差异检查通过;8.186测试服务重启后active,本机及局域网HTTP 200,Git提交 `8028ca8`。浏览器截图受本机Chromium沙箱策略阻止,未修改系统安全配置。训练记录:`工作指南/训练记录/2026-09-16-产品信息管理详情弹窗双列对齐.md`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:按旭东要求读取钉盘最新库存与日出库数据并同步8.186测试系统、云端82.156.135.91。两端均新增2026-09-16库存21个仓库、21,159条(可用库存45,691,510,生产在途1,632,198,采购在途12,919,725),补录2026-09-14八个店铺来源出库1,500条;最新出库日期为09-14、最新库存日期为09-16。两端各刷新11项计算缓存并重启服务,测试端双地址及云端本机/公网均HTTP 200。按钉盘全分页复查自09-05以来70个出库组合、189个库存组合,两端均无遗漏。训练记录:`工作指南/训练记录/2026-09-16-钉盘库存出库数据更新到8.186和云端.md`。未操作11.79生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:成品提货管理新增导出功能,支持导出当前搜索、品类、供应商及表头组合筛选后的全部结果,并可在弹窗中选择导出字段;后端同步校验操作权限与字段查看权限。Python/JavaScript、gzip、接口级筛选和字段选择测试通过,8.186测试服务重启后本机及局域网HTTP 200,Git提交 `7ce5d2a`。训练记录:`工作指南/训练记录/2026-09-16-成品提货筛选字段导出.md`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-15:沿用云仓方案优化计划预测 SKU 详情弹窗的外仓数据页签,按默认数据相同的16个字段顺序和四列布局展示,并接入外仓库存、销量、趋势、预测和支撑天数。Python/JavaScript、gzip、接口字段与有效样本值验证通过,8.186测试服务重启后本机及局域网HTTP 200,Git提交 `8c7a527`。训练记录:`工作指南/训练记录/2026-09-15-计划预测SKU弹窗外仓数据排列优化.md`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-15:计划预测点击 SKU 后的产品详情弹窗中,云仓数据页签已按默认数据相同字段顺序及四列布局展示;接入云仓库存、销量、趋势、预测和支撑天数。Python/JavaScript、gzip、接口字段与样本值验证通过,8.186测试服务重启后本机及局域网HTTP 200,Git提交 `d4c9c80`。训练记录:`工作指南/训练记录/2026-09-15-计划预测SKU弹窗云仓数据排列优化.md`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-15:按旭东要求读取钉盘最新库存与日出库并同步8.186测试系统、云端82.156.135.91。测试端补录日出库13个文件4,395条(含此前遗漏的09-12/09-13店铺文件),导入09-15库存21个仓库21,117条;云端同步目录内缺失批次并导入出库21,492条、库存105,494条。两端刷新11项缓存并验证HTTP 200;两端最新日期均为出库09-14、库存09-15。未操作11.79生产环境。训练记录:`工作指南/训练记录/2026-09-15-钉盘库存出库数据更新到8.186和云端.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:国内订单创建时按同一货品编号沿用最近一张订单的单价和仓库,正常确认下单与手工新增入口均已覆盖;详情弹窗原有编辑保存功能保持不变。Python语法、SQL参数数量和差异检查通过;8.186测试服务active,本机及局域网HTTP 200,Git提交 `cd048bf`。训练记录:`工作指南/训练记录/2026-09-14-国内订单详情沿用上单单价和仓库.md`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:按旭东要求仅备份并补导云端8-29库存。补导前该日期0条,切片备份至 `/home/ubuntu/dy_backups/inventory_20260829_pre_import_20260914_154142.sql.gz`;事务导入20个仓库、20,856条有效记录,库存合计46,318,868、非零8,686条、无效占位0。8月28日和31日补导前后记录数及库存合计完全不变;刷新11个缓存后服务active,本机HTTP和公网HTTPS均200。训练记录:`工作指南/训练记录/2026-09-14-云端8-29库存定向补导.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:按旭东确认修复云端8-31库存。先单独备份原错误记录,再仅删除并重导该日期;修复后20个仓库、20,871条有效记录,库存合计46,293,042、非零8,728条,与20个原始CSV按仓库+货品编号核对差异0,无缺失、多余及无效占位记录。刷新11个计算缓存后服务active,本机HTTP及公网HTTPS均200。备份:`/home/ubuntu/dy_backups/inventory_20260831_pre_reimport_20260914_151607.sql.gz`;训练记录:`工作指南/训练记录/2026-09-14-云端8-31库存正确数据重导.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:核查云端8-31库存全为0。确认不是文件遗漏:云端已有20个仓库、20,873条记录,但当次导入按旧表头“可用库存”读取,未读取实际“库存”字段,导致available_qty全部写为0;原始CSV库存合计46,293,042、非零记录8,728条。后续脚本已修正但因日期/仓库已存在而跳过重导;本次仅核查,未改云端,待确认后再备份并重导。训练记录:`工作指南/训练记录/2026-09-14-云端8-31库存为零原因核查.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:按旭东要求全分页核对钉盘库存与日出库文件,8.186测试系统补录出库7917条、库存21104条,云端按同批CSV导入出库17097条、库存84377条;两端最终出库最新2026-09-13、库存最新2026-09-14,库存21个仓库齐全。两端执行refresh_all_caches并验证HTTP 200;历史2026-09-06库存及该日天猫国际出库因钉盘无源文件暂无法补录。库存导入脚本补充UTF-8/BOM、GB18030、GBK自动编码识别。训练记录:`工作指南/训练记录/2026-09-14-钉盘库存出库数据更新到8.186和云端.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-11 下午:补录钉盘 09-10 旺店通日出库 1,921 条到 8.186 与云端,库存无新增(最新 09-11)。同步修复导入脚本:09-10 旺店通文件编码由 GBK 变为 UTF-8(BOM),脚本硬编码 GB18030 报错,改为自动检测编码(utf-8-sig/gb18030/gbk)。两端缓存刷新、HTTP 200。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-11:按旭东要求读取钉盘最新库存和日出库数据,同步到8.186测试系统与云端82.156.135.91。库存2026-09-11共21个仓库、21,118条(可用库存合计45,745,322,列名「库存」正确映射);日出库补录2026-09-09八个店铺文件1,495条;两端DELETE旧值后重导、刷新缓存、Gunicorn平滑重载、HTTP 200。查缺补漏:09-10出库未上传、09-06缺tmgj、09-08缺jdgj、库存缺09-06(来源无文件),待后续补录。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-10:继续排查李佩玲账号云端「新品包材管理」仍报网络错误。根因为前端 app.js 包材列表渲染复制粘贴遗留 bug:map 参数为 r 却引用未定义变量 row._id(且误调 salesManagementDetail/Delete),有数据即 ReferenceError 被 .catch 显示「网络错误」;包材表头本无操作列。已删除该多余操作列,8.186 与云端同步修复、重生成 app.js.gz,公网验证通过。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-10:按旭东要求排查云端新品下单子菜单网络错误。根因为 gunicorn 双实例+systemd 重启死循环:孤儿 gunicorn(PID 124227,9-5 18:37 手动启动 -w 4 -b 0.0.0.0:18888)占用 18888,systemd 服务 dy-dashboard.service(--workers 2 --bind 127.0.0.1:18888)无法绑定进入 Restart=always 死循环,重启计数 39,282 次,导致新品成品管理/新品包材管理请求间歇失败。修复:stop systemd → 杀孤儿 gunicorn 及 worker → start systemd 干净绑定;重启计数不再增长、公网 gyl.dieya.net.cn 及 /api/new_products/* 接口均 HTTP 200。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-10:按旭东要求读取钉盘最新库存和日出库数据,同步到8.186测试系统与云端82.156.135.91。库存2026-09-10共21个仓库、21,089条(可用库存合计45,821,467,列名「库存」正确映射);日出库补录9个文件3,623条:09-07天猫国际376条、09-08七个店铺(抖音M店/抖音Q店/京东泊紫/京东洁维塔/京东美瑞图/京东适美家/天猫国际)、09-09旺店通2,093条;两端DELETE旧值后重导、刷新缓存、Gunicorn平滑重载、HTTP 200。查缺补漏:09-08缺京东国际、09-06缺天猫国际、09-09店铺未上传、库存缺09-06(来源无文件),待后续补录。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-09:按旭东要求读取钉盘最新库存和日出库数据,同步到8.186测试系统与云端82.156.135.91。库存2026-09-09共21个仓库、21,066条(可用库存合计45,923,105,列名「库存」正确映射);日出库2026-09-08旺店通2,141条;两端DELETE旧值后重导、刷新缓存、Gunicorn平滑重载、HTTP 200。查缺补漏:09-07/09-08店铺出库未上传、09-06缺tmgj、库存缺09-06(来源无文件),待后续补录。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-08:按旭东要求读取钉盘最新库存和日出库数据,同步到8.186测试系统与云端82.156.135.91。库存2026-09-08共21个仓库、21,055条(可用库存合计45,846,998,列名「库存」正确映射);日出库补录24个文件6,223条:09-04/09-05各8个店铺、09-06共7个店铺(无天猫国际)、09-07旺店通2,163条;两端DELETE旧值后重导、刷新缓存、Gunicorn平滑重载、HTTP 200。查缺补漏:09-06店铺缺tmgj、库存缺09-06(来源无文件),待后续补录。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-07:按旭东要求读取钉盘最新库存和日出库数据,同步到8.186测试系统与云端82.156.135.91。库存2026-09-07共21个仓库、21,037条;日出库补录2026-09-05旺店通1,995条、2026-09-06旺店通2,011条;两端均DELETE旧值后重导、刷新缓存、Gunicorn平滑重载、HTTP 200。查缺补漏:钉盘09-04/09-05/09-06仅旺店通主数据,店铺出库文件未上传;库存缺09-06(来源无文件),待后续补录。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-05:按旭东要求读取钉盘最新库存和日出库数据。8.186 已导入 2026-09-05 库存 21 个仓库、20,999 条(可用库存 45,822,051、生产在途 1,593,616、采购在途 12,718,976)及 2026-09-04 旺店通日出库 2,073 条、数量 62,035;缓存刷新、Gunicorn 平滑重载、HTTP 200。云端 `82.156.135.91` 的 SSH、HTTP、HTTPS、18888 端口均持续超时,本次未写入云端;22 个源文件保留于 `backups/data_update_20260905_094743/` 待网络恢复。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-05:按旭东要求加固部署流程,避免 `static/uploads/new_products` 图片因 `rsync --delete` 或重建项目目录而丢失。`pack_deploy_full.sh` 已排除新品图片目录、部署前单独备份并在恢复后校验图片数量;`upgrade_full.sh`、`upgrade_prod.sh` 已排除该目录并在升级前独立备份;`backup.sh` 已新增新品图片独立备份。四个脚本 `bash -n`、关键保护项和 `git diff --check` 验证通过,Git提交 `fd531ae`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-05:按旭东要求从 11.79 生产系统恢复新品成品管理图片到云端。先按产品编码和 5 个图片字段核对两边数据库,9 条产品记录的 34 个图片引用完全一致;同步前备份云端原图片目录 `/home/ubuntu/dy_backups/new_products_recovery_pre_20260905_110300.tar.gz`,仅同步 `static/uploads/new_products/` 图片文件,不修改数据库及其他业务数据。恢复后 34/34 图片引用对应文件存在,34/34 图片 URL 返回 HTTP 200 且图片 Content-Type 正常;仅重启云端 `dy-dashboard.service`,服务与 Nginx active,公网 HTTPS 200。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-05:云端服务器续费恢复后出现502。经检查确认 Nginx 已运行但 Gunicorn 应用未启动,反代 127.0.0.1:18888 被拒绝;同时修正云端 `routes/products.py` 产品列表接口未定义变量 `unified_search` 的运行时错误,备份保留于 `/home/ubuntu/dy_backups/502_fix_20260905_100659/`。重启 `dy-dashboard.service` 后云端本机、公网 HTTPS 均HTTP 200。随后补同步 2026-09-05 库存 21 个仓库、20,999 条及 2026-09-04 旺店通出库 2,073 条、数量 62,035;刷新缓存,云端最新日期和数据汇总核验一致。训练记录:`工作指南/训练记录/2026-09-05-云端502故障修复与数据补同步.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-03:动销管理新增操作列与字段设置。列表新增详情、删除按钮(详情展示全部37字段、删除带确认和权限校验);新增字段设置,支持勾选显隐、拖动排序、保存/加载个人字段方案,操作列固定显示;修复前端脚本结构导致的语法错误。Python/JavaScript/gzip/diff、详情删除回归及测试服务平滑重载通过,Git提交 `7609ad4`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-03:按旭东要求将动销管理从库存/出库动态计算改为仅显示导入数据;已清空原动态309条结果,建立独立导入表,新增完整37字段Excel模板下载、Excel导入和按字段选择导出,支持编码/名称搜索和分页。模板表头顺序保持原表格顺序,导入/导出回归验证通过,测试环境Gunicorn平滑重载、模板和导出接口HTTP 200,Git提交 `8c394c8`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:修复云端计划预测「昨日销量」与出库数据不一致。根因:云端计算缓存(RefreshableCache 文件持久化)停在 8-29 未刷新,而 daily_outbound 数据已更新到 8-31;云端数据走手工 SQL 导入绕过导入脚本,且无 crontab、未调 refresh_all_caches(),服务重启只清内存缓存不清文件缓存。处理:云端立即 refresh_all_caches()(抽查产品昨日销量均与实时一致),并新增 /opt/dy-dashboard/refresh_cache.sh + crontab(30 7,12,18,23)定时刷缓存。
- 2026-09-01:按旭东要求完成字段级权限完整优化。新增 `services/field_perms.py` 字段清单单一来源(17页面/274字段,含敏感字段标记)、`/api/permissions/fields` 接口、角色级字段权限(复用 role_operation_permissions 的 field: 前缀)与用户级字段权限保存接口;敏感字段(成本价/单价/金额/审核价格/总成本/货品成本/产品总成本/产品总货款)默认隐藏需显式授权(后改为默认开放);计划预测/产品/数据概览明细接口后端强制过滤无权字段;前端角色弹窗与用户面板新增字段权限矩阵。Python/JavaScript语法、模块导入、字段解析、后端过滤、模板注入均验证通过;测试服务优雅重载HTTP 200,无启动错误。Git提交 `0b813e8`、`ca04a8e`。
- 2026-08-31:计划预测下单信息弹窗包材下单信息列表中,“更换稿件”字段已调整到“下单备注”字段前面;JavaScript/diff检查通过,测试服务热重载HTTP 200,Git提交 `a4d3eb6`。
- 2026-08-31:修复包材订单管理双重筛选异常。先筛选采购小组再打开货品名称时,联动 POST 接口因重复导入 `json` 触发局部变量遮蔽并返回500,导致前端永久显示“加载中”;接口改用 `_json` 别名,前端补充非2xx响应和异常兜底。Python/JavaScript语法、双重筛选接口验证通过;测试 `dy-dashboard.service` 重启后active,测试地址HTTP 200。
- 2026-08-31:计划预测下单信息弹窗中,成品下单备注已从成品信息表格移出,新增与批注信息同样样式的独立文本输入框并置于批注信息上方;支持回显、编辑、保存及下单同步提交。测试服务热重载后HTTP 200。
- 2026-08-31:重启云端 `82.156.135.91` 的 `dy-dashboard.service` 修复 `https://gyl.dieya.net.cn` 502。根因是应用服务停止,Nginx反代连接被拒绝;重启后服务active,云端本机和公网连续HTTP 200,未修改代码、数据库或业务数据。
- 2026-08-31:旭东反馈云端系统502,已完成公网访问、生产应用和Tailscale Funnel排查,当前公网HTTPS连续HTTP 200,服务正常,无需改代码或数据。
- 2026-08-29:按旭东要求在待下单管理新增库存支撑天数、备货支撑天数、3/7/14天平均销量和销售趋势字段。库存支撑天数按(库存+加工厂库存)/预测日销量计算,备货支撑天数按实际下单数量/预测日销量计算,预测日销量为0时显示999;前端表头、实时数据、数字/文本筛选及字段设置和字段方案顺序均已同步。Python/JavaScript语法及diff检查通过,测试Gunicorn重启后HTTP 200,Git提交 `b029331`。
- 2026-08-29:按旭东要求在待下单管理新增库存支撑天数、备货支撑天数、3/7/14天平均销量和销售趋势字段。库存支撑天数按(库存+加工厂库存)/预测日销量计算,备货支撑天数按实际下单数量/预测日销量计算,预测日销量为0时显示999;前端表头、实时数据、数字/文本筛选及字段设置和字段方案顺序均已同步。Python/JavaScript语法及diff检查通过,测试Gunicorn重启后HTTP 200,Git提交 `b029331`。
- 2026-08-29:继续优化订单管理货品类型列表头筛选性能。货品类型改为点击时按需加载,取消页面初始化预拉取;后端改为数据库内直接关联产品类型并去重,联动筛选也不再把订单编码全部拉回 Python 分批映射。国内、海外、包材三类订单覆盖,接口实测约5–48ms;Python/JavaScript语法、diff检查通过,测试gunicorn热加载后HTTP 200,Git提交 `e48f6e3`。
- 2026-08-29:国内、海外、包材订单管理的货品类型列新增表头筛选,可与搜索、状态、供应商、下单人及其他表头条件联动,并基于全量订单数据筛选;包材订单兼容来源成品编码。Python、JavaScript及联动筛选验证通过,测试服务重启后active、HTTP 200,Git提交 `5abfe0d`。
- 2026-08-29:国内订单管理、海外订单管理、包材订单管理、成品提货管理在货品名称右侧新增货品类型列,按货品编号批量匹配产品信息管理中的货品类型;包材编码无匹配时兼容来源成品编码。新列兼容字段设置、权限和导出,成品提货支持表头筛选。Python、JavaScript及数据匹配验证通过,测试服务重启后active、HTTP 200,Git提交 `79912c0`。
- 2026-08-29:下单备份管理的「订单管理」和「订单备份管理」新增下单日期筛选框,可按年月日精确筛选下单时间,并与编号/名称、下单人、采购计划及表头筛选联动;重置同步清空日期。JavaScript语法检查通过,测试服务重启后active、HTTP 200,Git提交 `9a4975b`。
- 2026-08-27:完成两阶段部署。第一阶段将8.186测试环境功能代码、数据库结构/字段、知识库部署到云端82.156.135.91,保留云端业务数据;云端因日志目录权限导致服务未启动,修复权限后active、HTTP 200,核心数据量保持products 9596、inventory_detail 2056069、daily_outbound 310196,知识库558个文件。第二阶段从云端部署后内容制作全量快照(含全部数据)升级11.79生产;生产升级前备份项目和数据库,升级后active、HTTP 200,核心数据与云端部署后快照一致为9596/2056069/310196,知识库558个文件。
- 2026-08-27:按旭东要求逐文件核对钉盘与8.186库存、出库数据。库存1152个日期+仓库组合全部覆盖;出库发现26个实际遗漏文件并补录12267条,另有2026-06-28三个文件以中文来源名保存,确认已存在未重复导入。最终按来源别名统一复核,钉盘618个出库组合全部覆盖;库存/出库无效编码均为0,补录前备份保留,测试服务重启后active、HTTP 200、启动日志正常。
- 2026-08-27:继续优化数据概览加载性能。定位到概览接口每次请求执行多项全表聚合约2.7秒;改为Gunicorn多worker共享文件缓存,数据更新/手动刷新后所有worker自动失效。首次重建约2.65秒,热加载约0.001秒;24项单元测试通过,测试服务重启后4个worker正常、HTTP 200。Git提交 `3c29af3`。
- 2026-08-25:按旭东要求优化现货模式销量管理,新增17列销量管理列表,接入现货商品基础信息、首批成本价、库存、采购在途、昨日/前日/7天/14天/30天/总销量、销售状态、销量趋势、首批入库时间和负责运营;支持搜索、分页并排除内料,测试服务平滑重载和接口验证通过,Git提交 `0cafdeb`。
- 2026-08-25:修复新品成品管理导出图片显示路径、及新品包材管理导出仅一条数据异常。成品导出改为Excel内嵌图片;包材导出与列表共用筛选条件并导出全部匹配BOM明细。语法、20项测试、Excel回归和HTTP 200验证通过;Git提交 32e4238。当前测试库历史图片文件缺失,补回图片后即可实际内嵌。
- 2026-08-25:按旭东要求优化现货确认子菜单,新增25字段确认列表,关联现货申请信息并建立样品状态、审批单号、快递单号、到样日期、领样及产品信息等确认字段数据结构;数据库迁移、语法检查、接口验证和测试服务重载通过,Git提交 `0cafdeb`。
- 2026-08-25:按旭东要求优化现货申请子菜单,新增申请列表和新增申请表单,申请人按当前登录账号自动绑定,日期按当天自动生成,部门暂为空,并支持品牌、产品名称、厂家、图片、产品链接、寄样数量、条形码、收件信息登记;数据库迁移、语法检查、接口验证和测试服务重载通过,Git提交 e999c6c。
- 2026-08-25:修复现货模式左侧图标无颜色问题。现货模式改为子菜单组后,原颜色样式只匹配旧顶层菜单,现已补充 `data-group="spot"` 的红橙色渐变样式。语法、diff 检查通过,测试服务重启并验证 HTTP 200。Git提交 a800618。
- 2026-08-25:按旭东要求新增现货模式四个子菜单:现货看板、现货申请、现货确认、销量管理。四个入口已接入SPA路径、刷新访问、权限配置和现货模式旧权限兼容;当前为功能占位页。Python/JavaScript语法检查、diff检查通过,测试服务重启运行中,HTTP 200。Git提交 e1c4488。
- 2026-08-24:新品下单菜单新增新品包材管理子菜单;新品管理改名为新品成品管理;包材管理按新品BOM弹窗表头读取并展示物料,支持筛选分页。测试服务热加载、HTTP 200和接口验证通过。Git提交 5449992。
- 2026-08-24:优化采销协同库存数据看板加载性能。缺货监控查询增加可用库存为0条件,减少无关库存明细扫描;缓存重建、语法检查、接口验证和测试服务热加载完成。Git提交 a58d164。
- 2026-08-24:备货通知格式调整,包材每个单独一行并带「包材数量:」前缀;dry-run 验证通过,服务 HTTP 200。Git 提交 f65264a。
- 2026-08-24:备货通知样式美化,改 <br/> 强制换行逐字段展示,包材明细同行空格分隔;dry-run 验证通过,服务 HTTP 200。Git 提交 5ae4e7b。
- 2026-08-24:修复确认下单报「网络错误: Unexpected token」问题。根因是 Decimal 无法 JSON 序列化(前端未传BOM修改数据时从bom表加载的quantity为Decimal),json.dumps 崩溃返回500。已加 default 转换修复,带BOM商品复现200通过。Git 提交 6e7af78。
- 2026-08-24:修正备货通知包材数量展示,由合计改为按包材分别列出(如彩盒500、瓶子500、泵头500);dry-run 验证通过,测试服务重载 HTTP 200。Git 提交 8682265。
- 2026-08-24:实现确认下单后按采购跟单组别发送钉钉群备货通知(跟单一组→采购1组群、跟单二组→采购2组群、跟单三组→采购3组群、现货小组→现货采购群)。采购跟单支持组名/姓名列表两种形态解析;通知含货品编号/货品名称/成品数量/包材数量,按群聚合后台发送;失败不影响下单。语法检查、组别解析测试、dry-run 验证通过,测试服务重载 HTTP 200。Git 提交 0b12fc0。
- 2026-08-24:按旭东提供的信息接入 OpenLux OpenAI 兼容接口,新增模型 `openlux/deepseek-v4-pro-0813`;配置校验通过,模型列表识别正常。API Key 已写入本机 OpenClaw 配置,未在知识库重复记录。
- 2026-08-22:按旭东要求将云端82.156.135.91的dy_data全库数据及知识库完整覆盖同步到192.168.8.186测试系统。同步前已备份测试数据库与知识库;同步后关键表记录与云端一致,测试服务重启、HTTP 200和505个知识库文件验证通过。
- 2026-08-22:按旭东要求将表格物料清单与192.168.8.186测试环境dy_data.bom匹配。输入2049行,编码精确匹配2043行,名称精确匹配4行,不存在2行;结果文件已上传钉盘“我的文件”。
- 2026-08-22:按旭东要求调整物料清单编辑展示逻辑,编辑弹窗展示完整BOM(含内料/-NL),计划预测及下单展示层继续过滤内料;Python/JavaScript检查通过,测试服务重启后HTTP 200。
- 2026-08-22:按旭东提供的物料清单表,匹配货品编号、物料编号并更新8.186测试环境bom_packaging下单前包材数量。2049行中成功更新2027行,22行因BOM不存在或内料/-NL跳过;更新前已备份,测试服务重启后HTTP 200。
- 2026-08-22:按旭东要求生成未更新22行包材数据明细表,包含6行BOM不存在、16行内料/-NL及对应原因,已上传钉盘“我的文件”。
- 2026-08-22:按确认要求调整下单后包材逻辑。现有表格导入的下单前包材保持不变;后续确认下单按下单前包材+包材实际下单数量-成品实际下单数量滚动计算下单后包材,并作为下一次下单前包材;下单后包材改为只读展示。语法检查通过,测试服务HTTP 200。
- 2026-08-22:修正下单后包材计算数据源,不再合并pending_orders历史下单缓存,确认下单以本次弹窗最新实际下单数据计算;示例按3000+3000-3000=3000。测试服务重启后HTTP 200。
- 2026-08-22:修正下单前包材显示,弹窗改为直接读取bom_packaging当前值,前端缓存不再覆盖表格导入的下单前包材;JWTBS-XMN-7354-ALJK核验为3000,测试服务HTTP 200。
- 2026-08-22:修正下单后包材弹窗展示,按下单前包材+包材实际下单数量-成品实际下单数量实时计算;示例3000+1000-1000=3000。测试服务重启后HTTP 200。
- 2026-08-25:修复新品包材管理导出返回 `not enough arguments for format string`。原因是“是否含税”SQL 中百分号未转义,被 PyMySQL 误判为格式占位符;已改为 `%%`,Excel 导出回归 HTTP 200,Git提交 99a100a。
- 2026-08-25:按要求导出2026-07-31日15号仓库存明细,共1316条、18字段,生成Excel并上传钉盘“我的文件”,文件名 `20260731-15号仓库存明细.xlsx`。
- 2026-08-27:按旭东要求完成8.186测试环境→云端→11.79生产环境两阶段部署。第一阶段同步功能代码、数据库结构/字段和知识库训练记录到82.156.135.91,保留云端业务数据;第二阶段从云端完整快照(含全部数据)升级11.79生产。两阶段均保留升级前项目/数据库备份,云端与生产关键表及代码校验通过,知识库554个文件,服务HTTP 200。
- 2026-08-26:执行NA/合计行清理。8.186清理库存合计/占位行2712条;云端/192.168.11.79清理库存合计/占位行2732条、出库合计行13条;两端出库与库存表均无NA、N/A、合计、合计:及空编码记录。已更新日出库、库存导入脚本过滤规则,清理前备份保留,语法检查通过,两端HTTP 200。
- 2026-08-26:按旭东提供的物料清单,匹配8.186测试环境计划预测成品及下单信息弹窗包材物料编号,更新下单前包材数量2039行(已有1989行、新建50行),同步包材备注57条;15行货品不存在、68行对应BOM不存在、11行内料/-NL按规则排除。补充 `bom_packaging.pkg_remark` 数据字段及接口/弹窗回显逻辑,更新前备份保留;语法、数据回归、接口读取和测试服务重启HTTP 200验证通过,Git提交 `dc5ed50`。
- 2026-08-26:修复物料清单管理模板导入包材供应商显示为空。导入供应商优先取 `bom.supplier`,无值时回退包材基础资料供应商;列表、详情和供应商筛选逻辑已统一,语法、数据库验证及测试服务重载通过,Git提交 `bca300e`。
- 2026-08-26:按旭东提供的物料清单,在云端系统(82.156.135.91)中匹配计划预测成品及下单信息弹窗包材物料编号,更新下单前包材数量2105行(已有321行、新建1784行,同步后bom_packaging共2242行),同步包材备注65条;2行货品不存在(POZ-MS-0224-TM)、14行对应BOM不存在、12行内料/-NL按规则排除。云端bom_packaging表补充pkg_remark字段,后端detail_with_bom读取、bom_packaging/save保存、purchase透传及前端弹窗回显已补齐;更新前备份 /home/ubuntu/dy_backups/bom_packaging_pre_20260826_1500/,服务重启HTTP 200,数据抽验通过。
- 2026-08-26:整理云端物料清单未匹配数据表并上传钉盘「我的文档」。含2行货品编号在云端不存在(POZ-MS-0224-TM瓶子/彩盒)、14行物料编号在对应成品BOM中不存在(含成品自身行、瓶子/彩盒/膜袋等),文件 `云端物料清单未匹配数据_20260826.xlsx`。
- 2026-08-26:计划预测新增批注列(8.186测试环境)。products表新增remark字段,列表品牌列后加批注列、编辑弹窗可修改、详情弹窗基础信息展示批注、下单信息弹窗成品区货品名称右侧加批注列并同步列表批注内容;接口保存/回读验证通过,服务HTTP 200,Git提交 5a0a7d1。
- 2026-08-26:批注展示优化(8.186测试环境)。编辑弹窗批注字段移到最后一个、改为大号自适应高度textarea(跨整行);下单信息弹窗批注从成品表格列移出,在成品/包材下单信息之间新增「批注信息」等宽字体编辑框,保存时自动同步products.remark;编辑弹窗保存逻辑支持textarea收集。服务HTTP 200,Git提交 8551ca5。
- 2026-08-26:修复下单信息弹窗批注保存失败(8.186测试环境)。根因:批注读取在弹窗关闭后(DOM已移除)读不到、且走batch_update需管理员产品编辑权限。修复:批注读取移到关闭弹窗前、新增/api/product/remark/save轻量接口(下单编辑权限)、保存按钮启用条件放宽为实际下单数量或批注任一可编辑;端到端验证通过,服务HTTP 200,Git提交 b589701。
- 2026-08-26:修复批注列不同步(8.186测试环境)。下单信息弹窗保存批注成功后立即刷新计划预测列表,外面批注列即时同步无需手动刷新;服务HTTP 200,Git提交 61f5149。
- 2026-08-26:批注功能同步到云端系统(82.156.135.91)。products表新增remark字段,同步计划预测批注列、编辑弹窗批注(置底大文本框)、详情弹窗批注、下单信息弹窗批注(等宽编辑框+remark/save接口+保存后即时刷新);products.py最小patch不夹带其他改动,app.js/planning.py/migrate_db.py覆盖本地最新版;更新前备份 ~/dy_backups/remark_sync_pre_20260826_1556/,端到端验证通过,服务HTTP 200。
- 2026-08-26:均线表产品批注导入。按货品编号匹配260826-均线表产品批注.xlsx(2571行,非空867行):8.186导入864行、云端82.156.135.91导入865行,未匹配POZ-MM-1673-TM-P、JWTBS-LLT-5844-ALJK-P(两端)及POZ-MS-0224-TM(仅8.186);批注写入products.remark,导入前备份,两端HTTP 200。
- 2026-08-26:下单信息弹窗批注改为只读(灰底、不可编辑),保存下单信息时不再同步批注,批注修改入口仅保留编辑弹窗;详情弹窗基础信息区批注字段改为跨整行显示、内容过长自动换行,不再挤压右侧字段。JS语法检查通过,测试服务重启HTTP 200,Git提交 5346fbf。
- 2026-08-26:下单信息批注只读+详情弹窗批注整行显示同步到云端系统(82.156.135.91)。覆盖 /opt/dy-dashboard/static/js/app.js(MD5与本地一致),更新前备份 ~/dy_backups/appjs_pre_20260826_1636/,云端服务重启后 active、HTTP 200、启动日志正常。
- 2026-08-26:下单回退包材结余同步回退(8.186测试环境)。从下单备份管理回退订单时,按该订单消耗量(成品实际下单数量-包材实际下单数量)加回 bom_packaging 下单前包材,回退后 post 同步为新 pre,多次回退按各自消耗量叠加;确认下单滚动逻辑保持不变。JWTBS-XYY-3608-ALJK 端到端验证:下单前5000→确认下单(成品1000包材不下单)后4000→回退恢复5000,测试数据已清理;回退操作日志新增包材回退明细;Python语法检查通过、服务HTTP 200,Git提交 9fe1fc8。
- 2026-08-27:修复国内/海外订单详情弹窗「跟单下单日期」不联动列表列。根因是弹窗字段错误绑定到订单下达供应商时间字段,列表列显示的是日期字段;改回日期字段后弹窗修改可联动列表(包材订单原本已正确)。app.js同步重生成gzip,测试服务重启HTTP 200,Git提交 64174b8。
- 2026-08-27:修复确认下单后备份BOM包材下单数量全部为0。根因是确认下单未携带前端BOM修改数据时,按用量×正式数量计算的包材实际下单数量未写回bom_items的actual_quantity字段,导致下单备份详情弹窗读取不到显示为0;已在确认下单循环写回actual_quantity和amount,测试服务重启HTTP 200,Git提交 6e8fc18。
- 2026-08-27:修复新品BOM同步到物料清单时物料编号名称映射错误。根因是同步时 material_code/material_name 优先取 common_code/common_name(通用物料编码/名称),导致误映射;改为直接取新品BOM的物料编码/物料名称。测试服务重启HTTP 200,Git提交 245d4ae。
- 2026-08-28:修复物料清单管理编辑部分物料供应商无法修改。根因是编辑提交的供应商名称未写入 `bom.supplier`,刷新后被物料基础资料旧供应商覆盖;现已补齐 BOM 新增和更新时的供应商持久化。Python语法检查通过,测试服务 active、HTTP 200、启动日志无新增错误,Git提交 `47b5080`。
- 2026-08-28:修复从待下单确认下单后,下单备份管理包材下单数量和包材下单备注未同步。根因是未携带前端 BOM 时错误跳过待下单已保存的 `bom_items`,直接读取基础 BOM;现调整为本次请求 BOM优先,其次使用待下单已保存 BOM,最后回退基础 BOM。Python、JavaScript语法检查及专项保留字段测试通过,测试服务 active、HTTP 200、启动日志正常,Git提交 `bff452e`。
- 2026-08-28:修复计划预测确认下单时包材实际下单数量被成品数量覆盖、包材数量为0仍生成包材订单的问题。明确保存的包材数量优先,字符串数量统一解析,0明确表示不下单;包材订单仅在数量大于0时创建,备注优先使用包材备注。Python、JavaScript语法检查及数量/备注专项测试通过,测试服务 active、HTTP 200、启动日志正常,Git提交 `7700455`。
- 2026-08-28:修复包材订单管理先筛选采购小组为跟单二组后,再筛选货品名称一直显示加载中。根因是联动筛选接口函数内重复导入 `json` 引发局部变量遮蔽,POST请求返回500;移除重复导入后接口正常返回。Python、JavaScript语法检查及联动筛选POST专项测试通过,测试服务 active、HTTP 200、启动日志正常,Git提交 `badb49e`。
- 2026-08-28:修复国内、海外、包材订单管理导出异常。导出改为按字段定义逐列生成,避免表头与日期、单价、供应商等数据错位;同时携带搜索、状态、供应商、下单人及表头筛选条件,导出全部匹配数据。JavaScript语法及差异检查通过,测试服务重启后active、HTTP 200、启动日志正常,Git提交 `077b3e0`。
- 2026-08-28:修复国内、海外、包材订单详情弹窗修改单价后保存卡顿。单字段修改改用对应单字段更新接口,多字段仍走批量接口,并补充HTTP异常处理,避免保存按钮永久停留在保存中;语法、diff、服务active及HTTP 200验证通过,Git提交 `7a16c5d`。
- 2026-08-28:按要求将8.186当天优化内容以增量升级包更新到云端82.156.135.91。仅覆盖6个运行时代码文件,未动数据库数据、知识库、配置、上传文件及其他无关内容;升级前备份,升级后逐文件SHA256一致,服务active、HTTP 200、启动日志正常。
- 2026-08-28:修复下单备份详情弹窗空字段报错。成品信息两列字段数量不一致时,渲染逻辑对不存在的字段增加安全判断,避免读取 undefined 下标;JavaScript语法、diff、测试服务重载及HTTP 200验证通过,Git提交 `bfa33d2`。
- 2026-09-15:修复国内订单字段异常。未到货数按数量减实际到货数量统一回填并同步,金蝶是否入库默认“否”,详情弹窗新增可清空的新旧品编辑字段并同步字段列;测试库回填434条未到货数异常、650条金蝶入库空值,复查异常均为0。Python/JavaScript/gzip/迁移幂等检查及26项单元测试通过,测试服务active,本机和192.168.8.186:18888均HTTP 200,Git提交95e4b92,未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-15:修正计划预测SKU弹窗订单在途时间,将国内订单“下单时间”改为同步国内订单管理的“跟单下单日期”,海外和包材逻辑不变;代码检查及真实样本验证通过,测试服务active、本机和192.168.8.186:18888均HTTP 200,Git提交e85310e,未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
## [2026-08-31] 部署 | 8.186测试→云端→11.79生产两阶段升级
- 8.186测试环境代码、数据库结构/字段和知识库训练记录已更新到云端82.156.135.91,保留云端业务数据。
- 云端全量快照(含全部数据)已升级到11.79生产,生产原有32个锁定账号的status=0规则已恢复,未受影响。
- 云端服务active、11.79服务运行,两端HTTP 200;核心数据与权限数据校验一致。
- 备份已保留,订单列筛选接口json变量遮蔽最小修复同步完成,Git提交bb845c5。
- 2026-09-01:继续修复下单备份管理字段切换后右侧空白,字段应用后重建当前表格列宽并按视口与实际内容宽度同步,操作列/状态列仍固定在右侧;修复列宽缓存重建过程中的字段键遗漏,语法、diff、服务重载和HTTP 200验证通过,Git提交 `36c6826`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:按旭东要求从钉盘读取9月1日库存数据并同步到8.186测试系统和云端82.156.135.91。两端均更新20个仓库、20907条记录,汇总一致;云端更新前备份保留在 /opt/dy-dashboard-backups/pre-data-update-20260901_20260901_094806/,两端及公网服务HTTP 200。
- 2026-09-01:核查钉盘8月29日至8月31日日出库数据并完成遗漏补录。8.186补录11个文件7737条,云端补录9个文件3591条;两端对应日期、来源、条数和数量均与钉盘一致。云端更新前备份分别保留在 /opt/dy-dashboard-backups/outbound-gap-fill-20260901_20260901_101042/,8.186与云端服务HTTP 200,公网HTTPS 200。
- 2026-09-01:继续修复下单备份右侧大片空白。定位根因为上一轮将 syncAdjustableTableWidth 改名为 syncBackupTableWidth 时遗漏 lockAdjustableTableColumnWidths、updateOrderColumnResize 两处旧函数名调用,运行时 ReferenceError 中断列宽同步、表格停留在 width:max-content 导致右侧空白;已统一恢复函数名并重新生成 app.js.gz,语法、diff、HTTP 200 验证通过,Git提交 `6441288`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:下单备份字段设置移除「序号」可勾选项,序号列固定在最前、操作列固定在最后并强制序号始终可见,修复取消序号后表头与数据行列数不一致导致的错乱;语法、diff、HTTP 200 验证通过,Git提交 `14d06a9`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:确认下单备货通知从调用本机 dws CLI 改为钉钉自定义机器人 Webhook 推送(4 个采购跟单组各自 webhook + 加签验签),解决云端因无 dws 命令导致的群通知静默失败;4 群逐群验证发送成功,本地 8.186 重载 HTTP 200,云端部署重启后 service active、本机及公网 HTTPS 均 200。Git提交 `5622b29`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:备货通知格式调整,新增成品下单备注字段,包材数量与包材下单备注按序号一一对应(无备注写「无」);本地 8.186 重载 HTTP 200,云端部署重启后 service active、本机及公网 HTTPS 均 200。Git提交 `99284e4`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:备货通知换行修复,钉钉 markdown 单换行不生效导致整条挤成一行,改用 `<br>` 强制换行并去掉包材序号,统一为「包材数量 / 包材下单备注」逐行展示;本地 8.186 重载 HTTP 200,云端部署重启后 service active、本机及公网 HTTPS 均 200。Git提交 `ee7bc39`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:权限配置内容为手动维护(`_permMenuTree` + `permission_pages`),新增子菜单不自动同步;补充采销协同 4 个子菜单(库存数据看板/重点SKU预测/SKU库存健康指数/呆滞SKU清单)。本地 8.186 重载 HTTP 200,云端部署重启后 service active、本机及公网 HTTPS 均 200。Git提交 `c9919f2`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:权限配置改为单一数据源,后端解析侧边栏 base.html 自动生成权限配置页面列表与菜单树(新增 PAGE_FEATURES + _sidebar_menu_pages,/api/permissions/pages 与 /api/permissions/menu-tree 均自动生成,前端删除硬编码 _permMenuTree 改为动态拉取);以后新增子菜单只需在侧边栏添加即可自动同步。本地 8.186 重载 HTTP 200,云端部署重启后 service active、本机及公网 HTTPS 均 200。Git提交 `ee9c3f3`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-01:为云端温效林、林凤贤配置受限只读权限。新建 `limited` 角色并分配,仅 view 成品库存/包材库存/计划预测/海外订单/包材订单 5 页面;字段级隐藏成本价/单价/金额/审核价格;前端补强海外品 tab 限制、订单操作列只显示详情、库存隐藏操作列、BOM 单价隐藏。云端部署重启后 service active、本机及公网 HTTPS 均 200。Git提交 `ed3faea`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-02:按旭东要求从钉盘读取并同步 9 月 2 日库存和 9 月 1 日出库到 8.186 测试系统及云端 82.156.135.91。库存导入 20 个仓库、20,912 条;9 月 1 日旺店通出库导入 2,127 条、数量 70,828。两端目标记录与汇总一致,缓存刷新、服务平滑重载后本机及云端 HTTP 200;过程文件保留在项目 `backups/data_update_20260902_103149/`。其他来源最新可见出库文件仍为 8 月 31 日。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard --> <!-- project: path:/home/gxd/.openclaw/workspace/dingtalk-assistant -->
- 2026-09-03:修复物料清单管理编辑历史产品提示“未找到该产品”。根因是部分 BOM 成品编码仅存在于 `bom` 表、未建立 `products` 基础资料;编辑接口原先只查 `products`,现对 `include_inner=1` 请求回退读取 BOM 成品编码和名称,普通详情请求行为不变。Python/JavaScript语法、接口回归、diff检查通过,测试服务平滑重载并验证 HTTP 200;Git提交 `52adab6`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard --> <!-- project: path:/home/gxd/.openclaw/workspace/dingtalk-assistant -->
## [2026-09-02] 优化 | 订单管理供应商多选筛选
- 国内订单管理、海外订单管理、包材订单管理及成品提货管理的供应商列支持同时勾选多个供应商,筛选条件按“或”关系匹配;搜索框用于定位筛选选项。
- 四个页面统一覆盖;JavaScript/Python语法、diff检查通过;测试环境Gunicorn平滑重载后HTTP 200,启动日志无新增错误。
- 训练记录:`工作指南/训练记录/2026-09-02-订单管理供应商多选筛选.md`;Git提交 `22750bb`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-03:按旭东要求统一国内、海外、包材订单编辑入口。核查确认外部列表可编辑字段均已有详情保存链路,国内/海外详情补充“仓库”字段;外部列表单价、供应商、仓库、下单人、进度、日期、状态等改为只读,详情保存后刷新对应列表同步。Python/JavaScript语法、gzip、diff及三类页面/接口HTTP 200验证通过,测试服务平滑重载。Git提交 `4f4dc56`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard --> <!-- project: path:/home/gxd/.openclaw/workspace/dingtalk-assistant -->
- 2026-09-03:修复国内订单详情选择蔡少铃后,外部下单人列显示“跟单三组”的问题。根因是列表人员标签默认将同组姓名折叠为组名;现让国内、海外、包材订单下单人列强制显示实际姓名。JavaScript/gzip/diff检查通过,测试服务平滑重载并验证HTTP 200,Git提交 `433c93f`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard --> <!-- project: path:/home/gxd/.openclaw/workspace/dingtalk-assistant -->
- 2026-09-03:按旭东要求优化国内/海外订单详情弹窗仓库编辑框。接入 `/api/warehouse/all` 获取全部仓库,按仓库名称模糊搜索,下拉显示名称和编号,选择后回填完整名称并可随详情统一保存。JavaScript、gzip、diff及接口/页面HTTP 200验证通过,测试服务平滑重载。Git提交 `7517443`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard --> <!-- project: path:/home/gxd/.openclaw/workspace/dingtalk-assistant -->
- 2026-09-03:修复成品提货管理详情弹窗进度与外部产品进度列不一致。统一从国内/海外未完结订单按最早下单时间读取进度,详情异步加载后刷新外部列表;Python/JavaScript/gzip/diff检查通过,测试服务平滑重载、HTTP 200,Git提交 `e1bc4c5`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-04:优化动销管理详情弹窗,改为双组分列的表格列表形式,字段标签和内容分格展示,统一边框、间距、圆角和长文本换行;37个字段全部保留,支持窄屏自适应。详情接口、语法、gzip、diff和测试服务HTTP 200验证通过,Git提交 `3f806b7`。训练记录:`工作指南/训练记录/2026-09-04-动销管理详情表格化.md`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-04:按旭东要求开放查看者上传合同模板权限;编辑、更换模板文件和删除权限仍仅管理员/超级管理员。Python语法、diff检查通过,测试服务平滑重载后HTTP 200,Git提交 `e57195f`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-04:修复合同模板菜单按最终查看权限隐藏,统一中文查看者与 viewer 权限映射;上传改用“编辑上传”有效权限校验;字段权限角色/用户两处统一为带边框表格样式。Python/JavaScript语法、gzip、diff检查通过,测试服务平滑重载后HTTP 200,Git提交 `a00965e`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-04:按旭东要求修改云端 `daily_outbound` 数据来源,将 1905 条“综合”出库记录改为“旺店通”;修改后综合为0条,云端旺店通记录3870条,公网HTTPS 200。 <!-- project: path:/home/gxd/蝶雅供应链 -->
- 2026-09-04:修复库存页面 `loadInventoryData` 引用未定义 `codeName` 导致页面加载报错,补充编号/名称搜索值,重新生成 gzip,测试服务平滑重载后HTTP 200,Git提交 `890e1d9`。 <!-- project: path:/home/gxd/蝶雅供应链/知识库 -->
- 2026-09-04:修复仓库属性变更后计划预测外仓库存未刷新。仓库属性保存接口已刷新后端缓存,但SPA页面仍使用旧数据;现覆盖编辑保存和内联勾选两条路径,成功后刷新计划预测/产品/采购页面并清理缓存页。JavaScript、gzip、diff、服务HTTP 200验证通过,Git提交 `cc070c2`。 <!-- project: path:/home/gxd/蝶雅供应链/知识库 -->
- 2026-09-05:按旭东要求核对钉盘与8.186测试系统、云端系统的日出库数据,确认两端缺少2026-09-02、2026-09-03共14个非旺店通平台出库文件;两端均补录1259条有效数据(常规导入1234条,另补录产品资料未匹配而被脚本跳过的抖音Q店25条),两端日期、来源、条数和数量一致。2026-09-04仅旺店通数据且两端已存在,未重复导入;缓存已刷新,服务HTTP 200。由于系统按全表最大出库日期计算,9月4日暂无非旺店通数据时“外仓昨日销量”仍会显示0。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-05:按旭东提供的41条货品编码更新8.186测试系统与云端产品信息货期;两端均匹配并更新41条、未匹配0条,只修改products.lead_time字段。更新前值已备份,缓存刷新后两端服务active、HTTP 200。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-05:按旭东要求完成两阶段部署。第一阶段将8.186测试环境的功能代码、数据库结构/字段、知识库训练记录更新到云端 `82.156.135.91:/opt/dy-dashboard`,未覆盖云端业务数据,云端新品图片保留51个;第二阶段从云端导出完整数据库(含数据)及完整项目内容迁移到11.79生产环境,生产新品图片保留51个。云端与生产服务均HTTP 200;生产部署前完整备份为 `/home/dieya/.openclaw/workspace/dy-dashboard_backups/pre-full-20260905_183857.tar.gz`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:修复计划预测 SKU 弹窗订单在途列表中,国内/海外订单无到货批次且订单表未到货数为空时显示0的问题;已改为正确显示未到数量。测试环境平滑重载后 HTTP 200,Git提交 `7e392fe`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:优化包材订单管理详情弹窗,删除“产品种类”字段,将“有无新稿件”改为“是否跟换稿件”,选项改为“是/否”。JavaScript语法、gzip、差异检查通过;8.186测试服务重启后active,本机及局域网HTTP 200,Git提交 `caa207a`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:继续优化包材订单详情,将“是否跟换稿件”修正为“是否更换稿件”,并调整字段排列,使左右两列各9项、逐行对齐。JavaScript语法、gzip、差异及列数检查通过;8.186测试服务重启后active,本机及局域网HTTP 200,Git提交 `b565bb7`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:按旭东澄清,撤回包材订单与计划预测之间的双向同步,仅保留计划预测“下单信息”弹窗点击“下单”时,将包材“更换稿件”值写入新建包材订单“是否更换稿件”字段;包材订单详情弹窗直接显示该值。语法、下单SQL映射、gzip及差异检查通过;8.186测试服务active,本机及局域网HTTP 200,纠正提交 `2916407`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:按旭东要求,将计划预测“下单信息”弹窗中的“更换稿件”列固定为90px,表头和数据单元格宽度统一;JavaScript、gzip、差异检查通过,8.186测试服务重启后active,局域网HTTP 200,Git提交 `7f94d54`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-14:将计划预测“下单信息”弹窗中“更换稿件”的“是/否”下拉框从50px调整为70px,常规及权限禁用状态宽度一致,外层列宽继续保持90px;JavaScript、gzip及差异检查通过,8.186测试服务重启后active,本机及局域网HTTP 200,Git提交 `2fc175a`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:包材订单管理列表在“货品类型”右侧新增只读“新旧品”列,详情弹窗新增“新品/旧品/无”下拉编辑;测试库新增字段并限制接口取值,语法、gzip、结构、接口和数据库检查通过,测试服务active、双地址HTTP 200,Git提交 `f4ecf17`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:修复包材订单详情“到货批次及数量”行保存提示被详情弹窗遮挡的问题;通用提示层级由10000提升到100001,高于详情弹窗99999。语法、gzip、层级断言及双地址HTTP 200验证通过,Git提交 `9c7a4b1`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:按旭东要求将云端包材订单“是否更换稿件”全部改为“否”(1,442条,改前已备份并记录分布),并新增详情弹窗按取值着色规则(是为红字、否为黑字,切换时实时变色)。两端验证通过,云端平滑重载后本机HTTP 200、公网HTTPS 200,Git提交 `30ce450`。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:库存与出库菜单下的成品库存、包材库存、出库明细三页新增导入功能,均可下载导入模板后上传CSV导入;库存按“库存日期+仓库+货品编号”、出库按“日期+数据来源+货品编号+仓库+店铺”先删后插去重,报表汇总行自动跳过,日期统一为YYYY-MM-DD。三页各新增“导入”操作权限(默认仅管理员可用)。接口级测试18项全部通过、测试数据已清理,JavaScript语法/gzip/差异检查通过,8.186测试服务重启后active、本机及局域网HTTP 200,Git提交 `92c41ea`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:修复国内订单管理 POZ-MYL-7166-PDD 实际到货数量/未到货数异常。根因为7月20—27日旧版到货批次回溯脚本按订单ID(未区分order_type)汇总批次,把同id包材订单的批次合计写入国内订单行(该代码问题已于7月27日修复)。按“实际到货数量=本订单本类型批次合计、未到货数=下单数量−该合计”重算,修复国内12行+包材19行共31行,修复前备份至 `backups/arrival_totals_repair_20260916_155723/before.json`;新增幂等修复脚本 `repair_arrival_totals.py`。接口实测列表与详情弹窗一致,测试服务重启后active、双地址HTTP 200,Git提交 `54ac86b`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:供应商管理在“跟单小组”后新增“采购计划”列,新增供应商弹窗、编辑弹窗、导入模板同步增加该字段;suppliers 表经幂等迁移新增 procurement_planner 字段,接口测试11项全部通过(含模板表头顺序、导入按该列更新、白名单校验),测试数据已清理,测试服务重启后active、双地址HTTP 200,Git提交 `646cf6b`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:修复产品信息管理导入无法覆盖修改采购计划的问题。原因为导入仅支持新增、已存在货品编号一律跳过(且缺货品名称列会被视为空行)。已改为已存在按文件内容覆盖更新、空白单元格保留原值、部分列即可更新、未知编码需填名称才新增,导入结果分新增/更新统计并记录日志;用真实产品 JWTBS-JMR-9778-ALJK 验证覆盖成功并已还原原值。接口测试9项全通过,测试服务重启后active、双地址HTTP 200,Git提交 `4dfa7f4`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:产品信息管理「新增产品」弹窗优化:采购跟单标签改为跟单小组、字段改为只读、按供应商名称自动带入跟单小组(新增 /api/supplier/follower_lookup,优先取供应商管理绑定值,未绑定时回退该供应商已有产品的跟单小组)。发现供应商管理557家的跟单小组字段目前全为空,已在回复中说明。接口测试7项+前端stub测试7项全通过,测试服务重启后active、双地址HTTP 200,Git提交 `a3eec68`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:产品信息管理「新增产品」弹窗采购计划改为两种逻辑:品牌为海外品(取品牌分类,新增 /api/brands/overseas)时可手动编辑,非海外品时只读并按供应商自动带入(优先供应商管理绑定值,未绑定回退该供应商已有产品的采购计划,新增 /api/supplier/bound_fields)。接口测试8项、前端stub测试16项全通过,测试服务重启后active、双地址HTTP 200,Git提交 `6b412a1`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:修复下单备份管理表格行漏渲染「加入时间」单元格(表头24列、数据行23格)导致向右滑动时右侧固定操作列错位到加入时间列的问题;补齐 created_at 单元格后订单管理/订单备份管理两页签均对齐。渲染结构断言10项全通过,测试服务重启后active、双地址HTTP 200,Git提交 `408e2d2`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:下单备份管理新增「单价」列(下单时间右侧)与详情弹窗成品信息单价字段;因备份记录本身无单价字段,经旭东确认取「该次下单生成的订单单价」——按下单时间+货品编号匹配国内/海外订单单价,无有效价显示「-」(147/413 条有有效价)。接口与前端渲染断言通过,测试服务重启后active、双地址HTTP 200,Git提交 `e04a430`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:新品成品管理新增「采购计划」列(产品开发左侧)及新增/编辑弹窗字段;新增弹窗该字段灰色只读,绑定BOM后按匹配关系回填——第一层按品牌(海外品留空、人工在编辑弹窗维护),第二层按BOM内料物料的供应商匹配供应商管理绑定的采购计划;匹配不到时不覆盖原值。new_products 表经幂等迁移新增 procurement_planner 字段。接口测试6项、前端断言5项全通过,测试服务重启后active、双地址HTTP 200,Git提交 `e064dd0`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:核对计划预测 SKU 弹窗「云仓数据」页签取数口径。结论:6 个字段已是云仓口径,无需改动(代码链路 + 真实弹窗渲染 + 从原始表独立重算全量比对,云仓库存 2649 产品、云仓销量 1308 产品均 0 处不符);昨日销量两边相同系 09-15 出库记录全为云仓仓库。旭东确认保持现状,未改代码、无提交。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:修复计划预测 SKU 弹窗三个页签(默认/云仓/外仓)产品分级不一致的问题——原云仓、外仓页签各按本口径销量重算分级,现统一取默认口径产品分级。抽查最近120个产品三级一致,测试服务重启后active、双地址HTTP 200,Git提交 `b85fe57`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:产品信息管理新增弹窗品牌字段改为下拉选择+模糊查询(点击展开、输入过滤、回车选中、Esc关闭、无匹配可手输新品牌),新增接口 /api/brands/all;品牌选择后仍联动采购计划逻辑。前端逻辑测试12项通过,测试服务重启后active、双地址HTTP 200,Git提交 `06020a2`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-16:执行“测试环境→云端→11.79生产”两阶段部署。第一阶段把8.186的功能代码(差异9个文件)、数据库结构/字段与训练记录同步到云端并保留云端数据:新增3个字段(new_products/suppliers 的 procurement_planner、packaging_orders.新旧品)、对齐3处字段定义差异,云端字段数978→981,未删任何字段与表,业务行数不变;知识库同步66个文件、训练记录670→686。云端备份 `~/dy-backups/cloud-pre-sync-20260916_182942/`,服务active、本机与公网HTTP 200、缓存已刷新。第二阶段从云端打包项目71M与数据库97M(含全部数据、排除feedback),三端md5一致;生产部署前完整备份到 `/home/dieya/.openclaw/workspace/dy-dashboard_backups/pre-cloud-sync-20260916_182942/`(代码64MB+数据库101MB),随后替换代码/vault/上传文件并全量导入云端数据库(错误0条),51张表行数与云端一致,反馈表按约定保留生产本地123条。排查发现生产服务实由 systemd --user 托管,pkill 会被自动拉起旧实例,已用 `systemctl --user restart` 正规重启,4 worker 正常、`192.168.11.79:18888` HTTP 200,云端与生产字段结构981=981一致。打包与导入窗口内云端新增的少量记录(国内订单/包材订单/待下单/日志共3-5条)未包含。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:同步钉盘最新库存与日出库到8.186与云端。用项目现有 import_dingtalk_latest.py 增量导入器两端各执行一次:出库补齐 2026-09-15 八个来源 1,499 条与 2026-09-16 旺店通 2,018 条,库存导入 2026-09-17 全部 21 个仓库文件 21,187 条(可用库存 45,490,421);写入前记录两端切片(目标组合均 0 行,未覆盖已有数据)。完整扫描钉盘 784 个出库、1,503 个库存文件生成期望组合比对:本地补录 2026-06-23 京东国际 250 条,云端补录 2026-06-28~09-01 共 70 个组合 23,381 条;2026-06-28 的 jdgj/jdjwt/tmgj 云端已用中文全称存储,判定命名差异不重复导入。归一化(中文全称来源 + 仓库编码前导零)复核出库 784/784、库存 1503/1503,两端缺口均为 0。两端 refresh_all_caches(),8.186 重启 dy-dashboard.service、云端平滑重载,服务 active、本机/局域网/公网均 HTTP 200。发现早已存在的历史差异:云端 2026-05-27~31 库存约 92.7 万行重复(978,172 行中唯一 50,420 行);库存 7/8 月本地多于云端,出库为双向差异;已在回复中说明并询问是否对账。未操作生产 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:系统设置新增「参数列表」子菜单(参数配置下方),页面两列为参数名称、参数计算逻辑,内置 X=云仓销量/昨日销量、Y=外仓销量/昨日销量;新增 param_list 表(幂等建表并写入初始参数)、`/api/param-list/list` 接口与页面路由,权限配置自动注册。页面路由302、接口401、数据库两条记录校验通过,Python/JavaScript语法与gzip缓存检查通过,测试服务平滑重载无错误日志,Git提交 `91c9148`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:按旭东更正,撤销新增的独立「参数列表」子菜单(侧边栏入口、/param-list 页面路由、独立接口全部移除),改为在「参数配置」页内新增独立列表「云仓外仓权重列表」,两列参数名称/参数计算逻辑,内置 X=云仓销量/昨日销量、Y=外仓销量/昨日销量(数据由 param_list 表幂等建表并写入初始参数,随参数配置接口返回)。接口返回、页面200、原路径失效、语法与gzip检查通过,测试服务平滑重载无错误日志,Git提交 `f2dac49`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:参数配置页两处调整——「云仓外仓权重列表」更名为「云仓外仓权重参数」;页内四个参数列表(趋势判断基础配置参数、日销量预测基础配置参数、云仓外仓权重参数、全局配置参数)的数据单元格统一居中,含输入框及其中数值,样式仅作用于本页。JavaScript语法与gzip缓存检查通过,测试服务平滑重载无错误日志,Git提交 `c51c6c7`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:计划预测第一个页签新增三个字段——「加工厂库存」右侧依次为云仓可分配库存(=总库存×参数X−云仓库存)、外仓可分配库存(=总库存×参数Y−外仓库存)、是否调拨(按可分配库存自动判定,选项云仓/外仓/云仓和外仓,均不大于0留空)。X=云仓昨日销量÷昨日销量、Y=外仓昨日销量÷昨日销量(分母为0时权重按0,保留1位小数);两列数值加入排序与数字筛选、是否调拨加入选项筛选,字段权限清单同步登记。接口200行逐行重算0处不符,语法与gzip检查通过,测试服务平滑重载无错误日志,Git提交 `3ca6911`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:计划预测在「总支撑天数」右侧新增云仓支撑天数、外仓支撑天数两列,公式为(本仓库存+本仓可分配库存)÷本仓日销量预测,保留1位小数,预测销量为0时显示999(与页面现有支撑天数列口径一致);两列加入排序/数字筛选,字段权限清单同步登记。接口2500行逐行重算0处不符,语法与gzip检查通过,测试服务平滑重载无错误日志,Git提交 `b640f68`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:产品信息管理「新增产品(成品)」弹窗调整采购计划逻辑——品牌为海外品牌时采购计划自动默认填写「张莹纯」,输入框仍可编辑,人工手填后不被覆盖;切回国内品牌恢复只读并按供应商自动带入。前端stub测试5项全通过,JavaScript语法与gzip缓存检查通过,测试服务平滑重载无错误日志,Git提交 `541fadc`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:计划预测「下单信息」弹窗支持海外品牌内料——海外品牌商品(品牌管理分类=海外)在包材下单信息列表及确认加入待下单弹窗中显示内料,确认下单后内料同步写入包材订单管理并参与包材结余滚动;非海外品牌完全保持原逻辑。detail_with_bom 新增 include_inner=auto 由后端按品牌分类判定,confirm_order 内料过滤改为「非海外才跳过」。接口实测 MUTO/PUNOMO(海外)多1行内料、洁维塔博士/泊紫汀兰(国内)与默认一致;语法与gzip检查通过,测试服务平滑重载无错误日志。Git提交 `c72bdcf`(routes/products.py + static/js/app.js);routes/purchase.py 因该文件附带历史未提交改动(包材单价/供应商全称/仓库到货/计划下单时间+修复已提交版本语法错误),按规则未并入提交,已请旭东确认。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:旭东确认「一起提交」,将 routes/purchase.py(本次内料同步守卫 + 该文件历史未提交改动:包材订单单价自动带入、供应商全称解析、仓库到货、计划下单时间列与排序、修复已提交版本语法错误)提交为 `59656d7`;工作区其余不相关文件(lint_knowledge.py、reimport.py、static/js/feedback.js)未提交。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-17:执行「8.186 → 云端 → 11.79 生产」两阶段部署。阶段一:云端备份(代码75.5MB/DB102.5MB)后差异同步10个功能文件、增量迁移仅新建 param_list 表(0个字段需MODIFY、云端独有列保留)、同步696篇训练记录,平滑重载+刷缓存,本机与公网探针200、下发app.js与磁盘一致。阶段二:预检两端表清单/feedback行数/生产磁盘后,云端打包全量(含数据、排除 feedback,md5三端一致),生产备份到 `~/.openclaw/workspace/dy-dashboard_backups/pre-cloud-sync-20260917_165904/`,就地替换(上传目录113→117项保留生产图片、VAULT_PATH改回、依赖安装、缓存清理)并全量导入(错误0条),52表行数仅 dashboard_logs 漂移5行(云端26679/生产26674,打包窗口写入),重启后5 worker正常、双地址探针200、两端字段986=986。未删除任何云端独有表或列。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-18:同步钉盘最新库存与日出库到 8.186 与云端。用项目现有 import_dingtalk_latest.py(本地)与 import_20260908_cloud.py(云端)增量导入器两端各执行一次:出库补录 2026-09-16 八个来源 1,501 条(dymuto 24、dyqsimelr 48、jdbz 301、jdgj 330、jdjwt 393、jdmrt 17、jdsmj 13、tmgj 375)与 2026-09-17 旺店通 2,111 条(67,142 件),库存导入 2026-09-18 全部 21 个仓库 21,215 条(可用库存 45,497,537、生产在途 1,672,739、采购在途 13,072,783)。写入前两端目标切片逐组合查询均为 0 行并保存 JSON 备份(backup_local.json / backup_cloud.json),未覆盖已有数据。完整分页扫描钉盘出库 794 个文件(生成 793 个日期+来源组合)、库存 1,524 个文件(1,524 个日期+仓库组合),归一化云端中文全称来源与仓库前导零后比对:本地补录 2026-06-23 京东国际 250 条(云端已有),两端出库与库存缺口均为 0。2026-09-16/09-17 出库与 09-18 库存两端行数、数量完全一致,空编码/NA/合计占位行为 0。两端执行 refresh_all_caches()(各 11 个模块),8.186 重启 dy-dashboard.service、云端 kill -HUP 平滑重载,服务 active、本机/局域网/公网均 HTTP 200。发现并报告早已存在的两端历史差异(未对账):出库 129 个日期中 109 个行数不同(本地 388,877 / 云端 395,450),云端多出约 4,858 条为早期中文全称重复来源(旺店通 3,870、天猫国际 458、京东洁维塔 379、京东国际 151);库存 2026-05 云端 978,172 行 vs 本地 50,395 行(云端早期成批重复行,去重后约 50,420 行),6/7/8 月各有差异,9 月两端均为 315,846 行完全相同。未操作生产 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-18:优化计划预测「建议下单数量」计算逻辑(routes/planning.py + static/js/app.js)。原逻辑为 int(日销量预测×(安全库存天数+货期+物流)),仅一个口径;现按「总支撑天数/云仓支撑天数/外仓支撑天数」与阈值 K=安全库存天数+货期+物流 的组合选择预测口径:三仓都不足→日销量预测;总仓不足且云仓不足、外仓充足→云仓日销量预测;总仓不足且云仓充足、外仓不足→外仓日销量预测;总仓充足且云仓不足、外仓充足→云仓日销量预测;其余组合(三仓都充足 / 总仓不足但云仓外仓都充足 / 总仓充足但云仓外仓都不足)不计算建议下单数量。相等边界按「充足」处理;建议下单数量=int(所选预测×K) 向下取整,实际下单数量仍按 1000 向上取整、不计算时为 0。原「日销量预测=0且库存>0→0」特判已由新规则自然覆盖(预测为0时三仓支撑天数均为999>K→不计算→0)。实现上新增 _calc_suggested_qty(),并把调用点从 _calc_support_days() 内移到云仓/外仓支撑天数计算完成之后(原位置这两个字段尚未生成);同步更新计划预测列说明(app.js 两处 planTips)并重新生成 app.js.gz。验证:单元测试覆盖8种组合+相等边界+预测全0共10项全部通过;接口 /api/planning/list 实测200行逐行独立复算0处不符,其中24行建议下单数量非0、40行与旧口径结果不同。测试服务重启后 active、本机与局域网 HTTP 200。Git提交 `8603b53`。未操作生产环境;「新品下单」页仍为旧公式,未一并修改。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-18:修复计划预测列表选项筛选异常(routes/planning.py)。现象:筛选「是否调拨=云仓」返回总数与不筛选相同(2,509),首页200行中187行该字段为空。根因:list 类型筛选的兜底匹配写成 `v == row_val or v in row_val or row_val in v`,反向包含 `row_val in v` 在单元格为空时恒为真(空字符串是任意字符串的子串),且单元格「云仓」也会被选项「云仓和外仓」命中。修复:去掉反向包含,只保留完全相等或单元格包含所选选项,空值单独判为不匹配。验证:筛云仓→625行本页200行全为云仓、不符0;外仓/云仓和外仓→0行;多选云仓+外仓→仅云仓625行;回归风险把控、销售趋势、是否新品、产品种类、波动风险、极值判断,返回行全部严格匹配、不符0。测试服务重启后 active、本机与局域网 HTTP 200。Git提交 `1c81ac0`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-18:同步钉盘最新日出库到 8.186 与云端。用项目现有 import_dingtalk_latest.py(本地)与 import_20260908_cloud.py(云端)增量导入器两端各执行一次:补录 2026-09-17 八个来源 1,501 条(dymuto 24、dyqsimelr 48、jdbz 301、jdgj 330、jdjwt 393、jdmrt 17、jdsmj 13、tmgj 375),与当天上午已导入的旺店通 2,111 条合计 09-17 全天 3,612 条 / 80,047 件,两端一致。写入前两端 8 个目标切片逐组合查询均为 0 行并保存 JSON 备份(backup_local.json / backup_cloud.json),未覆盖已有数据。完整分页扫描钉盘出库 802 个文件(789 个日期+来源组合)、库存 1,524 个文件(1,524 个日期+仓库组合),归一化云端中文全称来源与仓库前导零后比对:两端出库与库存缺口均为 0;库内另有 12 个「钉盘无对应文件」的早期组合(2026-05-15~06-03 的 jdgj/jdjwt/jdbz/tmgj),属既有历史情况未处理。两端累计:本地 390,378 条 / 9,797,305 件,云端 396,951 条 / 10,391,939 件(历史差异早已存在,本次未对账)。两端执行 refresh_all_caches()(各 11 个模块),8.186 重启 dy-dashboard.service、云端 kill -HUP 平滑重载,服务 active、本机/局域网/公网均 HTTP 200。未操作生产 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:同步钉盘最新库存与日出库到 8.186 与云端。用项目现有 import_dingtalk_latest.py(本地)与 import_20260908_cloud.py(云端)增量导入器执行:新增 2026-09-18 旺店通出库 2,067 条 / 57,174 件、2026-09-19 库存全部 21 个仓库 21,225 条(可用库存合计 45,337,130、生产在途 1,625,266、采购在途 12,851,483),两端一致;同时本地补录 2026-06-23 京东国际 250 条与 2026-09-16/09-17 五个来源共 58 行(dyqsimelr/jdbz/jdjwt/jdsmj/tmgj),这三批均为当天 08:00 数据清洗删除的行。写入前备份两端切片:本地 2,202 行(09-16/09-17 待替换组合)、云端 0 行(新增组合均空),保存 backup_local.json / backup_cloud.json。完整分页扫描钉盘出库 803 个文件(790 个日期+来源组合)、库存 1,545 个文件(1,545 个组合),归一化后两端出库与库存缺口均为 0,最新出库 09-18、最新库存 09-19。累计:本地 392,445 条 / 9,854,479 件,云端 399,018 条 / 10,449,113 件。两端执行 refresh_all_caches()(各 11 个模块),8.186 重启 dy-dashboard.service、云端 kill -HUP 平滑重载,服务 active、本机/局域网/公网均 HTTP 200。发现系统性问题:auto_clean.py 的「货品名称 = 空」删除规则会删掉非旺店通来源导入的行(这些货品编码不在产品主数据,导入时名称写空),形成「导入—次日 08:00 被删」循环,已造成 2026-09-01~09-15 本地比云端少 297 行(云端未执行该规则);已按“不擅自对账”原则报告并等旭东决定,未改动清洗规则、未补录 09-01~09-15 的 297 行。未操作生产 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:排查并修复计划预测「下单信息」弹窗下单前/后包材显示 -24995000 级天量负数(云端 31 个商品 51 行)。定位为数据被算坏而非显示问题:前端保存把 bom_items.quantity 写成「实际下单数量」(2026-07-31 提交 8e66faa 引入),确认下单滚动公式 `下单后包材 = 下单前 + 包材下单数 − 成品下单数×用量` 把它当用量代进去。修复:static/js/app.js 三处 quantity 改回读「用量」列;routes/purchase.py 新增 _resolve_roll_bom_qty,确认下单与订单回退的包材结余一律优先取 bom 表权威用量。端到端复现验证(临时商品、用量1、下单前3000、成品5000、包材5000/0,bom_items 故意写入污染值 5000):下单后包材 3000 与 -2000,修复前会是 -2400 万级;临时数据已清理。JS/Python 语法、gzip 缓存、服务重启 active、HTTP 200 均通过。Git提交 `cb1ec72`(仅 static/js/app.js、routes/purchase.py)。云端历史脏数据与代码同步等旭东确认后进行。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:执行「同步云端 + 修复数据」。代码:routes/purchase.py 整文件替换(与8.186一致),static/js/app.js 定向补丁4处(不改动云端独有的列说明文案),重新生成 app.js.gz,gunicorn 平滑重载,本机与公网 HTTP 200、下发资源含修复。数据:云端 bom_packaging 受检 77 行(31 商品),逐行反推「那次被污染写入之前的值 + 真实用量重算」,确认 12 行真被污染并修复——POZ-BXQXJ-0880-TM 三包材 -24995000→0、POZ-XFS-3691-TM 三包材 -79982000→10000、POZ-XFS-7010-TM 瓶/泵 -49985000→10000 彩盒 -74984000→11000、POZ-MM-3332-TM-MD -15000→3000、JWTBS-HYT-0008-ALJK 彩盒 -2000→-7000 面膜袋 25000→-25000;其余 65 行为正常负数(包材未下单而成品消耗),未改动。修复前备份 15 行到 `~/dy-backups/bom-packaging-packfix-20260919_152221/`、代码到 `~/dy-backups/code-packfix-20260919_1521xx/`,修复后 refresh_all_caches()。两处云端基准与本地导入值不同已报告(XFS-7010 彩盒云端基准1000 vs 本地15000;JWTBS-HYT-0008 云端基准-5000 vs 本地2000)。未操作 11.79 生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:计划预测「下单信息」弹窗内料显示规则增加国家名判断——海外品牌之外,还要货品名称含「新西兰/新加坡/韩国」任一才显示内料,其余海外品与国内品一致不显示内料。改动 routes/products.py(include_inner=auto 分支新增 INNER_MATERIAL_NAME_KEYS 判断)+ static/js/app.js(两处注释)。测试环境实测:海外品牌且 BOM 含内料的 435 个商品中,按新规则只剩 16 个(名称带(新西兰)/(新加坡)/(韩国))会显示内料;接口实测命中品含内料、未命中海外品与国内品均不含内料;JS/Python 语法、gzip 重生成、服务重启后 active、本机与局域网 HTTP 200 通过。Git提交 `ee3dfd2`。确认下单写入包材订单的内料判断(routes/purchase.py)未同步该名称规则,已请旭东确认是否一并调整。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:确认下单内料写入包材订单同步国家名规则——只有品牌分类=海外且货品名称含「新西兰/新加坡/韩国」的商品,内料才随包材订单写入包材订单管理;订单流向仍按品牌分类判断。改动 routes/purchase.py(新增 allow_inner_material,复用 routes.products.INNER_MATERIAL_NAME_KEYS)。三种用例走真实确认下单接口验证全部通过(海外+含国家名→内料写入;海外+不含→不写入;国内+含→不写入),临时数据已清理;服务重启后 active、本机与局域网 HTTP 200。Git提交 `559bd9b`。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:AI分析板块「数据源与口径」优化。①修复 brand 参数在产品库存/产品销量两个数据源不生效(补齐「品牌」列);②新增 5 个数据源(5→10):planning_metrics 计划预测口径(复用计划预测页同一套计算:日销量预测/总·云仓·外仓支撑天数/可分配库存/是否调拨/建议下单数量/产品分级/销售趋势)、orders_in_transit 订单在途与到货(国内/海外/包材未完结订单未到数量,包材按所属成品归集)、material_inventory 包材与内料库存、inventory_value 逐商品库存金额(含特殊成本价规则)、brand_overview 品牌汇总(SKU数/库存/金额/昨日与30天均销/近30·100天动销SKU数);③修复数据源通用排序对文本字段(是否调拨/产品分级/销售趋势)报错,改为数值排序失败回退字符串排序。验证:新数据源逐个直调 + brand 参数在 6 个数据源全部命中 + 真实 /api/ai/ask 五问端到端,AI 分别正确选到新数据源并返回数据;服务重启后 active、本机与局域网 HTTP 200。Git提交 `edd9700`。AI分析的页面展示、提示词、权限历史三个方向未动。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:AI分析「页面与结果展示」优化。①结果自动配图(日期列→折线趋势,其余→前12名横向柱状图,Chart.js);②结果表格加「导出CSV」(带BOM,导出全部行)与「复制」(制表符,可直接粘进Excel)工具条并显示总行数;③表格超100行时橙色提示总行数与查看方式;④回答上方新增「数据源 · 数据日期」灰字(库存类用最新库存日2026-09-19、出库类用最新出库日2026-09-18、订单在途实时无日期,10个数据源都配了 date_kind);⑤历史回看复用同一套渲染并保存 meta 与总行数。验证:JS/Python 语法、gzip 重生成、服务重启后 active、本机与局域网 HTTP 200;真实 /api/ai/ask 三问返回均带 datasource_name/data_date/total_rows。Git提交 `320fb27`。剩余方向:提问理解与提示词、权限与历史记录。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:AI分析「提问理解与提示词」优化。①系统提示词补 6 条 few-shot 示例(问题→输出JSON,覆盖按日出库/品牌库存/调拨/包材库存/品牌汇总/在途未到货)并加排序字段约束;②追问时前端提交上一轮结果(数据源+列+前5行),后端注入上下文,支持「这里面最低的是哪个」类追问;③AI选不到数据源时后端按关键词评分推荐最接近数据源(10个数据源均配 keywords),前端渲染为可点击按钮,点击即用该数据源重问;④示例问题 6→10 条并覆盖新数据源,输入区新增「💡 示例」按钮(对话中途可随时打开);⑤无源兜底文案改为列出全部可问范围。验证:真实接口四类场景(选源、追问沿用数据源、无源兜底、推荐按钮)均通过;JS/Python 语法、gzip、服务重启后 active、本机与局域网 HTTP 200。Git提交 `992a689`。剩余方向:权限与历史记录。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-19:AI分析「权限与历史记录」优化。①金额类数据源(库存成本汇总/商品库存金额/品牌汇总)接入字段级权限,未显式授权时后端拒绝并提示,管理员不受限(走现有 field:<字段>:view 配置,权限配置页可勾选);②/api/ai/ask 返回 can_export(显式配置优先、未配置跟随页面查看权限),前端据此显示/隐藏导出与复制按钮;③历史记录支持关键词搜索(问题/摘要)、按数据源下拉筛选(显示中文名)、单条删除(仅限本人,越权返回404),保留整条清空。验证:viewer 角色问金额类数据源被拒、非金额类正常;显式授权后立即可查、撤销后恢复拒绝;导出权限设0后 can_export=False、删除配置后恢复;历史关键词命中9条、数据源筛选2条、删除后1条、越权删除404;语法/gzip/服务重启后 active/本机与局域网 HTTP 200 均通过。Git提交 `e46a3ec`。AI分析四个方向已全部完成(仅测试环境)。未操作生产环境。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-20:排查云端生产系统网页打不开并优化测试环境库存导出内存占用。排查(只读):外网 https 超时、80 端口仍 301、443 端口可连通但无响应;10:14 nginx 记录 `POST /api/inventory/export` 上游超时,10:55 gunicorn master 报两个 worker(pid 615950、689048)被 SIGKILL 疑似 OOM,worker 死亡期间 nginx 返回 502 即用户看到的打不开,随后 gunicorn 自动重启、10:55:15 后服务自行恢复(复测公网 200、0.2~0.6s)。根因:导出接口全表查询 + openpyxl 普通模式整份表格驻留内存,服务器 2GB 内存被打满(mysqld 被换出 858MB、swap 占用 954MB)。另发现 `routes/inventory.py:326` 处类型绑定报错、磁盘 86%(剩 5.7G)、负载读数 37~64 但 CPU 99% 空闲且无 IO 等待(腾讯云宿主层读数,非本机真实负载)。优化(仅 192.168.8.186 测试环境):① services/db.py 新增 query_iter(),用 SSDictCursor 按批(2000 行)流式取数;② routes/inventory.py 导出改流式逐批写入 + openpyxl write_only,新增 \_export_cell() 统一单元格类型(Decimal→float、timedelta→str,修掉原先报错点),csv 分支同步改流式;③ gunicorn 增加 `--max-requests 800 --max-requests-jitter 100`,三处同步——用户级 systemd 单元 `~/.config/systemd/user/dy-dashboard.service`(此前误查系统级未找到单元)、update_data.py、run.py;④ 清理日志 error.log(217MB)/access.log(22MB)/auto_update.log 各保留末 2000 行,logs 目录 26M→118K。实测对比(最新库存日 2026-09-19,19,248 行):内存峰值 56.1MB→2.6MB、耗时 4.3s→3.1s。端到端:真实接口导出成品 xlsx 200、工作表「库存导出」14,334 行 / 0.48MB,csv 200 / 1.50MB,表头与首行格式与原一致;systemd 重启后服务 active、本机 HTTP 200(0.04s)。Git提交 `2d60493`(仅 services/db.py、routes/inventory.py、update_data.py、run.py)。待旭东决定:云端生产是否同步该优化、实例内存升级。未操作云端生产与 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-20:将库存导出内存优化部署到云端生产(gyl.dieya.net.cn)。部署前对比确认云端 services/db.py、routes/inventory.py 与本地改动前完全一致(云端无独有版本),故按定向补丁覆盖这两个文件,未夹带其他改动;备份到 ~/dy-backups/export-memfix-20260920_114046/(两代码文件 + systemd 单元)。systemd 单元 /etc/systemd/system/dy-dashboard.service 的 ExecStart 仅追加 --max-requests 800 --max-requests-jitter 100,其余配置原样保留;daemon-reload + restart 后服务 active、本机 HTTP 200(0.004~0.1s)、公网 https 三次 200(0.22~0.28s)、登录页 200。云端真实数据导出实测:xlsx 200 / 工作表「库存导出」14,172 行 / 0.45MB / 1.9s,csv 200 / 1.48MB 表头正常。日志清理:error.log(45M)、access.log(24M) 各保留末 2000 行,logs 目录降至 708K。⚠️ 部署中发现云端磁盘 100% 满(40G 用满、0 可用)并一度阻塞写入:直接元凶为当天 10:57/10:58 两次全量云端备份各 3.5G、合计 7G(落在故障时间窗内,把 86% 顶到 100%),长期因素是 /etc/cron.d/dy-dashboard-backup 每天 08:30 的 backup.sh 持续累积(/opt/dy-dashboard/backups 现 3.3G / 31 包)与 /tmp 约 1.4G 陈旧部署产物;已就清理范围询问旭东未获回复,按最保守方式只清理明确临时产物——journal 压缩到 100M(释放 425.6M)+ /tmp 内 9 项陈旧部署产物(约 1.2G),共释放约 1.8G(现 787M 可用),未删除任何备份(当天两份全量备份、每日备份目录、/opt/backups 652M、8 月旧目录 532M 全部保留待决)。遗留待决:备份清理范围、每日备份保留策略、同日两次全量备份的来源。本次未操作生产 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-20:清理云端一份全量备份并复核成品库存导出。备份清理:两份 full-cloud 全量备份(20260920_105721 / 20260920_105851)内容一致仅相差 43 秒,先对保留份做 SHA256 校验(全部 OK),再删除较旧的 `full-cloud-20260920_105721`,磁盘 98%(787M 可用)→ 89%(4.3G 可用),释放 3.5G;保留 `full-cloud-20260920_105851`(代码全量包 3.6G + 数据库全量 104M + SHA256SUMS)与 8 月 29 日那份 full-cloud 备份。导出复核(云端真实数据、成品口径):列表接口 200;xlsx 200 / 工作表「库存导出」14,172 行 / 0.45MB / 2.1s;csv 200 / 1.48MB / 14,172 行 / 0.4s——修复前该导出跑不完且 worker 被 OOM 杀掉,现在秒级完成。清理后复核服务 active、本机 HTTP 200、公网 https 200(0.21s)。仍待决:每天 08:30 自动备份的保留策略(会持续累积)、今天为何连跑两次全量备份。未操作生产 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-21:排查并修复云端生产「系统无法打开」(gyl.dieya.net.cn)。现象:静态首页可打开、`POST /api/login` 卡死无响应。时间线:08:30 每日备份 cron 导出 698M SQL 后打包时磁盘写满(log 中 `gzip: stdout: No space left on device`、tar 只写入 2048/10240 字节后失败),本次备份中断;因 `set -euo pipefail` 中断在第 2 步,末尾 `rm -f ${DB_DUMP}` 未执行,698M 临时 SQL 滞留项目目录,磁盘维持 100%;09:05 gunicorn `Autorestarting worker after current request`、09:07 `WORKER TIMEOUT (pid:968880)`,中断栈停在 `POST /api/login` → `services/db.py: conn.commit()`,即 MySQL 因磁盘满无法提交把登录拖到 60 秒超时。根因:磁盘 100% 满(40G 用 38G、可用 0),累积备份约 25G(/opt/dy-dashboard-backups 12G、/opt/dy-dashboard_backups 4.5G、/opt/dy-dashboard/backups 3.4G、/home/ubuntu/dy-dashboard-backups 3.9G、/opt/backups 0.65G、/home/ubuntu/backups 0.71G);现有 30 天保留策略只覆盖每日目录的 `dy_platform_backup_*`,`new_products_images_*` 与手工/部署备份目录无清理机制。处理(清理范围先经旭东确认,选「清理 9/10 之前的旧备份 + 失败残留」):删除上述各备份目录中 2026-09-10 之前的全部备份,并删除失败残留 698M 临时 SQL 与截断损坏的 85M `dy_platform_backup_20260921_0830.tar.gz`;保留 09-10 以后全部备份、两份 full-cloud 全量备份(09-20/09-21),未动范围外的 `/opt/dy-dashboard.old-20260808_101255`(278M) 与 `/opt/dy-dashboard-before-20260807_092207`(254M)。结果:磁盘 100%(0 可用)→ 59%(16G 可用),释放约 15G;服务 active、本机 18888 端口 200(0.004s)、公网首页 200(0.34s)、登录接口 200(0.68s);重跑 backup.sh 成功,生成 `dy_platform_backup_20260921_0930.tar.gz`(177M) 与 `new_products_images_20260921_0930.tar.gz`(59M),临时 SQL 由脚本正常清理。待旭东决定(未擅自改):给手工/部署备份目录加保留策略并覆盖 `new_products_images_*`;`backup.sh` 增加失败兜底(tar 失败也删临时 SQL)+ 磁盘水位预检。未操作 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-21:云端磁盘占用治理建议 + 每日备份目录加保留策略(旭东仅选定此项)。先用现有证据定位「水龙头」:自动化任务「云端每日完整备份」每天 08:00 跑 `backup_cloud_daily.py`,向 `/opt/dy-dashboard-backups` 写一份 3.5G 全量包且无保留策略,每约日增量 3.7G;今天 08:00 那次吃掉最后约 4G(manifest 记 `disk_free=785M`)导致 08:30 每日备份写满中断;且该全量包 `tar -czf ... -C /opt dy-dashboard` 无排除项,把 venv/uploads/vault/logs 与每日备份包也一起打包(3.4G 中水分极大)。建议六项:①全量瘦身+留最近2份+降每周 ②每日备份目录保留策略 ③backup.sh 失败兜底+磁盘预检 ④全量包外移 ⑤journald 上限/MySQL binlog 过期/inventory_detail 归档 ⑥磁盘水位告警。旭东选定仅第②项,已执行:备份原脚本到 `~/dy-backups/backup-sh-pre-retention-20260921_094541/`,改 `/opt/dy-dashboard/backup.sh` 清理段为「项目包保留 14 天(原 30 天)+ 图片包保留 7 天(原从不清理)」,`bash -n` 通过;立刻按新策略清理一次,删掉 09-10~09-13 四份图片包(约 230M),目录 2.8G→2.5G(21 个文件),磁盘 59%、服务 active、本机 200 均正常。其余各项未执行,等旭东指令。未操作 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->
- 2026-09-21:钉盘最新库存与日出库更新到 8.186 与云端(原指令为 11.79,因 11.79 离线改目标)。11.79 排查:`ip neigh` 显示 FAILED、ping 100% 丢包、SSH `No route to host`,扫描 192.168.11.0/24 无主机开 18888,云端亦不可达,判定主机不在线,未做任何读写。钉盘完整分页扫描:日出库 820 文件(最新 20260920-wdt-cksj.csv,09-20 仅旺店通 1 来源、09-19 有 8 来源)、库存 1,566 文件(最新 20260921-wdt-kcmx-*,09-21 齐 21 仓:01/02/04/05/06/07/09/10/11/12/13/14/15/16/20/24/25/26/27/29/35)。按归一化规则(来源中文全称折算代码、仓库去前导零,导入清单保留原始编码)两端比对,缺口一致:出库 17 个组合(09-18 dymuto/dyqsimelr/jdbz/jdgj/jdjwt/jdmrt/jdsmj/tmgj、09-19 八个缺失来源含 wdt、09-20 wdt),库存 21 个组合(09-21 全部仓);09-05 之前历史组合(出库 703、库存 1,293)保留未动。写入前两端 38 个目标切片各存 JSON(全部 0 行);38 个源文件下载后 scp 到云端 /tmp/update_20260921,两端 md5 摘要一致(61ab187b7f2c983a901d3139eccb5a4e);导入复用现有 import_dingtalk_latest.py(本地)与 import_20260908_cloud.py(云端),特殊成本价 8 条与无效编码过滤沿用原逻辑,两端各新增出库 6,781 条、库存 21,403 条。两端各刷新 11 个缓存模块,8.186 用户级 systemd 重启、云端 kill -HUP 平滑重载;HTTP 8.186 本机/局域网 200、云端本机/公网 200。最终全量复核:两端缺口 0/0,38 个组合逐条一致,出库按日期+来源行数与数量合计两端相同,库存 09-21 两端均 21 仓/21,403 条/可用 45,577,437/生产在途 1,685,627/采购在途 12,970,943,脏数据 0。累计:8.186 出库 398,918(至 09-20)、库存 1,626,603(至 09-21);云端出库 405,799、库存 2,477,105。未操作 11.79。 <!-- project: path:/home/gxd/.openclaw/workspace/dy-dashboard -->