47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
"""报销单号/标题生成(从 bx-backend 迁移,增加 tenant_no 隔离)。"""
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import text
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
def generate_apply_code(db: Session, prefix: str, tenant_no: str) -> str:
|
|
"""
|
|
生成顺序单号:{prefix}{YYYYMMDD}{3位序号}。
|
|
prefix 示例:BYJ(备用金)、BX(报销)。
|
|
"""
|
|
today = datetime.now().strftime("%Y%m%d")
|
|
like_pattern = f"{prefix}{today}%"
|
|
|
|
result = db.execute(
|
|
text(
|
|
"SELECT MAX(CAST(SUBSTRING(apply_code, -3) AS UNSIGNED)) FROM ("
|
|
"SELECT apply_code FROM bx_advance_apply "
|
|
"WHERE tenant_no = :tenant_no AND apply_code LIKE :p1 AND del_flag = 0 "
|
|
"UNION ALL "
|
|
"SELECT apply_code FROM bx_reimburse_apply "
|
|
"WHERE tenant_no = :tenant_no AND apply_code LIKE :p2 AND del_flag = 0"
|
|
") t"
|
|
),
|
|
{"tenant_no": tenant_no, "p1": like_pattern, "p2": like_pattern},
|
|
).scalar()
|
|
|
|
seq = (result or 0) + 1
|
|
return f"{prefix}{today}{seq:03d}"
|
|
|
|
|
|
def generate_title(db: Session, applicant_name: str, tenant_no: str) -> str:
|
|
today = datetime.now().strftime("%Y%m%d")
|
|
like_pattern = f"%报销单{today}%"
|
|
|
|
result = db.execute(
|
|
text(
|
|
"SELECT COUNT(*) FROM bx_reimburse_apply "
|
|
"WHERE tenant_no = :tenant_no AND title LIKE :p AND del_flag = 0"
|
|
),
|
|
{"tenant_no": tenant_no, "p": like_pattern},
|
|
).scalar()
|
|
|
|
seq = (result or 0) + 1
|
|
return f"{applicant_name}报销单{today}{seq:03d}"
|