feat(purchase): 采购批次号支持,同一批提交的记录可分组查看/统计
背景: 循环提交把一批物品生成多条独立申请,无法识别'哪些是同一批采购' 后端: - purchase_request 模型新增 batch_no 字段(同一批提交共享) - create 接口接收 batch_no,无则自动生成 BATCH-yyyyMMdd-HHmm-随机 - 新增 GET /purchase/batch/<batch_no> 按批次查询所有记录 - 批量审批接口支持按 batch_no 一键审批整批 前端: - 提交时生成 batch_no 共享给所有行 - 列表新增批次号列(可点击) - 新增'整批查看'弹窗:显示同批次所有记录 + 一键批量通过本批 - 操作列新增'整批'按钮 数据库需执行: ALTER TABLE purchase_request ADD COLUMN batch_no VARCHAR(100);
This commit is contained in:
@ -20,6 +20,18 @@ 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):
|
||||
"""
|
||||
@ -67,8 +79,12 @@ 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', ''),
|
||||
|
||||
Reference in New Issue
Block a user