PayrollManagementSystem/backend/app/services
liuwenxin 9964281c14 fix(approval): 版本号唯一键兜底 + 取号改当前读防并发重复
- V12 迁移:先重排存量重复 (order_type, ref_id) 分组的 version_no
  (V11 把存量一律置 1,而 V11 前重提是新建行),再加
  uk_approval_orders_order_type_ref_version;只重排真有重复的分组,
  避免改动前端已展示过的历史版本号
- _next_version 改锁读(select version_no ... FOR UPDATE,最大值在
  Python 侧算):请求级鉴权的普通 SELECT 已把 REPEATABLE READ 快照
  锚定在请求开始时刻,原 MAX 快照读在并发下会算出同一版本号;
  聚合 + FOR UPDATE 为 MySQL 明确禁止,故不锁聚合结果
- 编辑与月结提交路径把 1062 收敛为 400「提交冲突(版本号生成重复),
  请重试」,其余完整性错误原样上抛;submit_order 内不 catch/rollback
- 驳回清空方案的过时注释改为 V11 起的 append-only 语义(置历史不删行)
- init-dev.sql 同步唯一键与 alembic_version 7f4f7b918bc4,导出 V12 SQL
- 测试:集成 +5(锁读 SQL 形态、两会话快照回归、唯一键 1062、冲突 400、
  正常递增)+ 单元 +1;工作台假审批单改用不同 ref_id 适配唯一键
- 全量回归 897 passed;ruff 与前端 type-check 绿

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 13:31:01 +08:00
..
__init__.py chore: 初始化项目结构与登录鉴权模块 2026-10-09 18:46:36 +08:00
approval_service.py fix(approval): 版本号唯一键兜底 + 取号改当前读防并发重复 2026-10-22 13:31:01 +08:00
audit_service.py feat(system): 完成后端系统管理(审计/角色/操作日志/日志查询) 2026-10-10 16:28:04 +08:00
auth_service.py chore: 初始化项目结构与登录鉴权模块 2026-10-09 18:46:36 +08:00
business_role_service.py feat(system): 业务岗位角色管理接口与保护规则 2026-10-12 16:39:08 +08:00
business_service.py fix(approval): 版本号唯一键兜底 + 取号改当前读防并发重复 2026-10-22 13:31:01 +08:00
calc_service.py feat(calc): 二次分摊拆行与 #12 单笔侧开关——按方案比例拆给参与人、余额归负责人 2026-10-19 13:15:59 +08:00
calc_templates.py feat(system): 计提公式模板注册表与精确分数计算函数 2026-10-12 16:22:32 +08:00
captcha_service.py chore: 初始化项目结构与登录鉴权模块 2026-10-09 18:46:36 +08:00
customer_service.py refactor(repos): 归属留痕共享数据访问,人员在职校验收口单点 2026-10-15 09:49:53 +08:00
dashboard_service.py fix(dashboard): 修复普通用户落地页与待办角色过滤 2026-10-20 09:45:03 +08:00
formula.py feat(formula): 首日计提比例取整 10‰(#14 答复——图示口径覆盖公式) 2026-10-19 11:40:07 +08:00
log_service.py feat(system): 完成后端系统管理(审计/角色/操作日志/日志查询) 2026-10-10 16:28:04 +08:00
login_limiter.py chore: 初始化项目结构与登录鉴权模块 2026-10-09 18:46:36 +08:00
manager_share.py fix(report): 报表统计修复批次——对账口径、导出审计与月份校验 2026-10-20 09:44:43 +08:00
no_generator.py fix(no_generator): 编号 MAX 检索改长度优先排序,破解位宽进位后字典序失效 2026-10-14 14:09:30 +08:00
param_registry.py feat(dashboard): 工作台四区块实时聚合与风险预警参数 2026-10-19 18:44:15 +08:00
param_service.py feat(migration): V7 核算台账/月结/调整单四表与核算纯函数 2026-10-16 16:32:32 +08:00
personnel_service.py refactor(repos): 归属留痕共享数据访问,人员在职校验收口单点 2026-10-15 09:49:53 +08:00
product_service.py fix(product): 删除引用保护/单价小数位校验,IntegrityError 全局兜底转 400 2026-10-14 18:48:32 +08:00
rating_service.py style(backend): formatter 收口两处漏网文件(纯格式无行为变化) 2026-10-15 17:25:24 +08:00
receipt_service.py fix(m3): code-review P1——锁定不变量、入结回填与双轨漂移 2026-10-19 11:59:49 +08:00
report_export.py fix(report): 报表统计修复批次——对账口径、导出审计与月份校验 2026-10-20 09:44:43 +08:00
report_service.py fix(report): 报表统计修复批次——对账口径、导出审计与月份校验 2026-10-20 09:44:43 +08:00
role_service.py feat(migration): V6 系统设置/二次分配/审批表与角色参数种子 2026-10-15 17:25:23 +08:00
settlement_service.py fix(approval): 版本号唯一键兜底 + 取号改当前读防并发重复 2026-10-22 13:31:01 +08:00
shipment_service.py fix(m3): code-review P1——锁定不变量、入结回填与双轨漂移 2026-10-19 11:59:49 +08:00
system_setting_service.py fix(m3): code-review P2——金额校验、参数解析与运维脚本容错 2026-10-19 12:10:29 +08:00
token_blacklist.py chore: 初始化项目结构与登录鉴权模块 2026-10-09 18:46:36 +08:00
user_service.py feat(system): 完成后端系统管理(审计/角色/操作日志/日志查询) 2026-10-10 16:28:04 +08:00