refactor(purchase): 批次概念改为基于 request_no 前缀推导,撤销数据库字段

按用户反馈:不需要新增数据库字段,现有 request_no (PUR-20260831-1021-0001)
本身就能推导批次——去掉末尾4位流水号即为批次前缀。

- 撤销 purchase_request.batch_no 字段(模型/数据库)
- 撤销 create 接口的 batch_no 参数与 generate_batch_no
- 批次标识 = request_no 去掉末尾 -XXXX 段
  getBatchKey('PUR-20260831-1021-0001') = 'PUR-20260831-1021'
- 按批次查询/批量审批接口改用 batch_key (request_no LIKE 前缀)
- 前端列表批次号列、整批弹窗、一键审批本批均基于前缀推导
- 零数据库迁移,历史数据立即可用
This commit is contained in:
yueli
2026-08-31 13:49:11 +08:00
parent 664127ee30
commit f499346f74
5 changed files with 40 additions and 63 deletions

View File

@ -20,18 +20,6 @@ class PurchaseService:
.filter(PurchaseRequest.request_no.like(f"{prefix}%")).scalar()
return f"{prefix}{(existing_count + 1):04d}"
@staticmethod
def generate_batch_no():
"""生成采购批次号: BATCH-yyyyMMdd-HHmm-当日流水(4位)
同一批循环提交的多条记录共享同一 batch_no"""
import uuid
beijing_tz = timezone(timedelta(hours=8))
now = datetime.now(beijing_tz)
date_str = now.strftime('%Y%m%d')
time_str = now.strftime('%H%M')
# 用时间戳 + 随机段确保唯一
return f"BATCH-{date_str}-{time_str}-{uuid.uuid4().hex[:4].upper()}"
@staticmethod
def auto_fill_from_material(keyword: str):
"""
@ -79,12 +67,8 @@ class PurchaseService:
if material:
base_id = material.id
# [新增] 批次号:前端同一批循环提交时传入同一 batch_no无则自动生成
batch_no = data.get('batch_no') or PurchaseService.generate_batch_no()
purchase = PurchaseRequest(
request_no=request_no,
batch_no=batch_no, # [新增]
base_id=base_id, # [新增]
name=data['name'],
spec_model=data.get('spec_model', ''),