协议样本、生产产出和盘点明细按行更新并保留原 id;补齐存储证明质检预填、离职人员显示名,以及样本采集通知模板字段。 Co-authored-by: Cursor <cursoragent@cursor.com>
234 lines
6.8 KiB
Python
234 lines
6.8 KiB
Python
"""中试输注应用确认 CRUD"""
|
|
from datetime import datetime
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.core.utils import generate_uuid
|
|
from app.models.models import BizPilotInfusionConfirm, BizPilotInfusionPlan, BizPilotInfusionSchedule
|
|
|
|
|
|
# ────────────────────────────────────────────
|
|
# Helpers
|
|
# ────────────────────────────────────────────
|
|
|
|
|
|
def _row_to_dict(row) -> Dict[str, Any]:
|
|
return {
|
|
"id": row.id,
|
|
"infusionScheduleId": row.infusion_schedule_id or "",
|
|
"confirmUserId": row.confirm_user_id or "",
|
|
"confirmTime": row.confirm_time.strftime("%Y-%m-%d %H:%M:%S") if row.confirm_time else "",
|
|
"confirmDesc": row.confirm_desc or "",
|
|
"tenantNo": row.tenant_no or "",
|
|
"remark": row.remark or "",
|
|
"createBy": row.create_by or "",
|
|
"createTime": row.create_time.strftime("%Y-%m-%d %H:%M:%S") if row.create_time else "",
|
|
"updateTime": row.update_time.strftime("%Y-%m-%d %H:%M:%S") if row.update_time else "",
|
|
}
|
|
|
|
|
|
# ────────────────────────────────────────────
|
|
# CRUD
|
|
# ────────────────────────────────────────────
|
|
|
|
|
|
def create_infusion_confirm(
|
|
db: Session,
|
|
*,
|
|
schedule_id: str,
|
|
tenant_no: str,
|
|
user_id: str,
|
|
create_dept_id: str = "",
|
|
confirm_desc: str = "",
|
|
remark: str = "",
|
|
) -> Dict[str, Any]:
|
|
now = datetime.now()
|
|
row = BizPilotInfusionConfirm(
|
|
id=generate_uuid(),
|
|
infusion_schedule_id=schedule_id,
|
|
confirm_user_id="",
|
|
confirm_time=None,
|
|
confirm_desc=confirm_desc,
|
|
tenant_no=tenant_no,
|
|
order_num=0,
|
|
remark=remark,
|
|
create_by=user_id,
|
|
create_dept_id=create_dept_id or "",
|
|
create_time=now,
|
|
update_by=user_id,
|
|
update_time=now,
|
|
del_flag=0,
|
|
)
|
|
db.add(row)
|
|
db.flush()
|
|
return _row_to_dict(row)
|
|
|
|
|
|
def list_confirms_by_application(
|
|
db: Session, application_id: str, tenant_no: str
|
|
) -> List[Dict[str, Any]]:
|
|
plan_ids = [
|
|
r[0]
|
|
for r in db.query(BizPilotInfusionPlan.id)
|
|
.filter(
|
|
BizPilotInfusionPlan.pilot_application_id == application_id,
|
|
BizPilotInfusionPlan.tenant_no == tenant_no,
|
|
BizPilotInfusionPlan.del_flag == 0,
|
|
)
|
|
.all()
|
|
]
|
|
if not plan_ids:
|
|
return []
|
|
|
|
schedule_ids = [
|
|
r[0]
|
|
for r in db.query(BizPilotInfusionSchedule.id)
|
|
.filter(
|
|
BizPilotInfusionSchedule.infusion_plan_id.in_(plan_ids),
|
|
BizPilotInfusionSchedule.tenant_no == tenant_no,
|
|
BizPilotInfusionSchedule.del_flag == 0,
|
|
)
|
|
.all()
|
|
]
|
|
if not schedule_ids:
|
|
return []
|
|
|
|
rows = (
|
|
db.query(BizPilotInfusionConfirm)
|
|
.filter(
|
|
BizPilotInfusionConfirm.infusion_schedule_id.in_(schedule_ids),
|
|
BizPilotInfusionConfirm.tenant_no == tenant_no,
|
|
BizPilotInfusionConfirm.del_flag == 0,
|
|
)
|
|
.order_by(BizPilotInfusionConfirm.create_time.desc())
|
|
.all()
|
|
)
|
|
return [_row_to_dict(r) for r in rows]
|
|
|
|
|
|
def get_confirm_by_schedule(
|
|
db: Session, schedule_id: str, tenant_no: str
|
|
) -> Optional[Dict[str, Any]]:
|
|
"""按输注计划 ID 获取应用确认(含确认人姓名快照)。"""
|
|
from app.models.models import SysUser
|
|
|
|
row = (
|
|
db.query(BizPilotInfusionConfirm)
|
|
.filter(
|
|
BizPilotInfusionConfirm.infusion_schedule_id == schedule_id,
|
|
BizPilotInfusionConfirm.tenant_no == tenant_no,
|
|
BizPilotInfusionConfirm.del_flag == 0,
|
|
)
|
|
.first()
|
|
)
|
|
if not row:
|
|
return None
|
|
data = _row_to_dict(row)
|
|
uid = (row.confirm_user_id or "").strip()
|
|
if uid:
|
|
user = (
|
|
db.query(SysUser)
|
|
.filter(SysUser.id == uid)
|
|
.first()
|
|
)
|
|
data["confirmUserName"] = (user.nick_name or user.user_no or "") if user else ""
|
|
else:
|
|
data["confirmUserName"] = ""
|
|
return data
|
|
|
|
|
|
def get_confirm_by_id(
|
|
db: Session, confirm_id: str, tenant_no: str
|
|
) -> Optional[Dict[str, Any]]:
|
|
row = (
|
|
db.query(BizPilotInfusionConfirm)
|
|
.filter(
|
|
BizPilotInfusionConfirm.id == confirm_id,
|
|
BizPilotInfusionConfirm.tenant_no == tenant_no,
|
|
BizPilotInfusionConfirm.del_flag == 0,
|
|
)
|
|
.first()
|
|
)
|
|
if not row:
|
|
return None
|
|
return _row_to_dict(row)
|
|
|
|
|
|
def confirm_infusion(
|
|
db: Session, confirm_id: str, tenant_no: str, user_id: str
|
|
) -> Dict[str, Any]:
|
|
now = datetime.now()
|
|
row = (
|
|
db.query(BizPilotInfusionConfirm)
|
|
.filter(
|
|
BizPilotInfusionConfirm.id == confirm_id,
|
|
BizPilotInfusionConfirm.tenant_no == tenant_no,
|
|
BizPilotInfusionConfirm.del_flag == 0,
|
|
)
|
|
.first()
|
|
)
|
|
if not row:
|
|
raise ValueError("应用确认记录不存在")
|
|
if row.confirm_time is not None:
|
|
raise ValueError("该记录已确认")
|
|
|
|
row.confirm_user_id = user_id
|
|
row.confirm_time = now
|
|
row.update_by = user_id
|
|
row.update_time = now
|
|
db.commit()
|
|
db.refresh(row)
|
|
return _row_to_dict(row)
|
|
|
|
|
|
def update_infusion_confirm(
|
|
db: Session, confirm_id: str, tenant_no: str, user_id: str, **kwargs
|
|
) -> Dict[str, Any]:
|
|
row = (
|
|
db.query(BizPilotInfusionConfirm)
|
|
.filter(
|
|
BizPilotInfusionConfirm.id == confirm_id,
|
|
BizPilotInfusionConfirm.tenant_no == tenant_no,
|
|
BizPilotInfusionConfirm.del_flag == 0,
|
|
)
|
|
.first()
|
|
)
|
|
if not row:
|
|
raise ValueError("应用确认记录不存在")
|
|
|
|
field_map = {
|
|
"confirmDesc": "confirm_desc",
|
|
"remark": "remark",
|
|
}
|
|
for camel, snake in field_map.items():
|
|
if camel in kwargs and kwargs[camel] is not None:
|
|
setattr(row, snake, kwargs[camel])
|
|
|
|
row.update_by = user_id
|
|
row.update_time = datetime.now()
|
|
db.commit()
|
|
db.refresh(row)
|
|
return _row_to_dict(row)
|
|
|
|
|
|
def delete_infusion_confirm(
|
|
db: Session, confirm_id: str, tenant_no: str, user_id: str
|
|
) -> None:
|
|
row = (
|
|
db.query(BizPilotInfusionConfirm)
|
|
.filter(
|
|
BizPilotInfusionConfirm.id == confirm_id,
|
|
BizPilotInfusionConfirm.tenant_no == tenant_no,
|
|
BizPilotInfusionConfirm.del_flag == 0,
|
|
)
|
|
.first()
|
|
)
|
|
if not row:
|
|
raise ValueError("应用确认记录不存在")
|
|
|
|
row.del_flag = 1
|
|
row.update_by = user_id
|
|
row.update_time = datetime.now()
|
|
db.commit()
|