郑博文
|
ac4ba7514b
|
merge: 集成客户评级弹窗、公司信息精简与参数中文化
将 feat/settings-rating-brand(基于 927592b)合并到最新 main(d03ddad):
- 冲突收口:系统设置服务/契约、集成测试夹具、布局/路由/登录页、客户列表
- 迁移重编号:本分支未发布的三个迁移压成 V11(客户评级 + 站点信息 + 版本号),
down_revision 接到 main 的 90653814a421,db/migration 相应改为 V11
- 站点图标上传与 logo 上传统一为同步 def,超限先按 file.size 拦截
|
2026-10-20 11:42:49 +08:00 |
|
郑博文
|
27533eb465
|
wip: 客户评级弹窗化/公司信息精简/参数中文化/品牌站点同步(基于 927592b)
|
2026-10-20 11:06:01 +08:00 |
|
liuwenxin
|
45c268b146
|
fix(m3): code-review P2——金额校验、参数解析与运维脚本容错
- 调整单金额恒正:schema 正则拦格式(非负两位小数、≤12 位整数防
NUMERIC(14,2) 溢出)+ 服务层 Decimal>0 语义校验——负数会反转补发/
扣减语义,'abc' 原样入库会以 500 暴露
- 分界天数参数解析:int(parse_fraction(...)) 替代 int(参数原文)——
'360.0' 是 INT 参数的合法入库值(Fraction 分母为 1),直接 int(str)
抛 ValueError 会让整月核算 500
- logo 旧文件清理容错:OSError 只记 warning——裸抛会把成功的 logo 更新
记成失败审计并 500(库中 logo_path 却已是新值,审计与事实相反)
- health_check.sh:Redis 探活改容器内环境变量展开(密码不进宿主进程
命令行,模式同 backup_full.sh);compose redis 补 REDIS_PASSWORD
- restore_drill.sh:行数核对扩到全部 32 张业务表(原 16 张漏 V7 四表、
二次分配等核心表,备份漏表演练全绿);查询失败回显 '?' 一律判 ✗
(原 '?'=='?' 判一致,表缺失时误报「备份可恢复」)
- 并入 88 会话的 #12 实现:manager.personal.included 开关消费
(_build_manager_aggregates 参数化,测试见 828b573)
- 测试:调整单金额恒正 5 稿、INT 参数小数原文核算 200 回归;单测 469
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 12:10:29 +08:00 |
|
liuwenxin
|
1c93ea0a4b
|
fix(m3): code-review 15 项修复(13 项落地,2 项依赖分摊语义记待办)
- 审批:删 _flush_order 撞键内部重试(rollback 会回掉同事务业务行造成
静默丢数据,异常改由 create 外层重试整体重来/update 路径审计收敛);
act() 出参固化前置到 commit 之前(commit 后查询失败会把已通过的审批
记成失败审计);驳回/撤回清空方案生效行(防被否决方案进 M3 快照);
keyword 改 contains(autoescape=True) 对齐全库转义口径;撤单抽
withdraw_pending_orders 供编辑清空方案时显式调用
- 业务:删业务遇在途审批单禁删 400、终态审批单随 _hard_delete 清理;
编辑清空方案同步撤回在途单;历史离职参与人编辑放行(冗余姓名固化
语义,仅新增参与人做在职校验)
- 迁移:business_secondary_allocations 补 uk(business_id, personnel_id)
(模型/迁移 py/导出 SQL/init-dev 四方同步,开发库往返重放验证)
- 设置:upload_logo 改同步 def(阻塞操作不卡事件循环)+ file.size 先拦;
company_name schema 剥空白防全空白入库;logo 旧文件清理移到 commit
成功后(防库指旧路径而文件已删断链);uploadLogo 走 request() 解包
(原直发 service.post 不解包信封,logoUrl 会被置 undefined)
- 备份:restore_drill --drop-exec 先清全部历史 drill 库再演练并即删本轮
(原语义永远删错对象,每轮净增一份整库拷贝)
- 测试:conftest 清理补 system_settings 种子行与 uploads/logo 文件;
新增 5 例(驳回清方案/清空撤单/在途禁删终态随删/离职放行/BOOL 边界);
全量回归 701 passed
- 遗留 2 项记 AI_CONTEXT(方案版本承载、审批单快照,依赖 ④ 分摊语义)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-16 14:23:53 +08:00 |
|
liuwenxin
|
efed29647c
|
feat(settings): 公司信息配置与 logo 管理(public 端点供登录页)
- system_settings 单行 CRUD:GET/PUT(AdminUser)+ GET /public(无鉴权,
SettingPublicOut 白名单仅 company_name/logo_url 两字段,短缓存 300s)
- logo 上传:后缀+magic bytes+2MB 三重校验,固定名覆盖落盘 uploads/logo/
(不使用上传方文件名,杜绝路径拼接);旧扩展名文件清理;文件流端点
no-cache,URL 带 update_time 版本参数破缓存
- logo 存目录不存库:图片入 DB 让每次读取与 mysqldump 放大传输且无法
独立替换;DB 只持一行相对路径
- 新增依赖 python-multipart(FastAPI UploadFile 必备传输层);.gitignore
增 backend/uploads/ 与 db/backups/
- 集成 11 例:单行语义/白名单字段/三重校验/越权 403/匿名 401/审计留痕
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 18:22:12 +08:00 |
|