feat: wire protocol bundle to per-sample payment model v2

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-10-03 11:08:07 +08:00
1 parent 2ff5bc09f9
commit a328b9ff2d
3 files changed
+295 -17

No files matched your search

+47
View File
@@ -400,6 +400,13 @@ def _protocol_to_dict(p: BizCollectionProtocol) -> Dict[str, Any]:
"toResearchTime": _fmt_dt(p.to_research_time),
"toResearchDesc": p.to_research_desc or "",
"collectorUserId": p.collector_user_id or "",
"protocolTotalAmount": _dec(p.protocol_total_amount)
if getattr(p, "protocol_total_amount", None) is not None
else None,
"sourcePresignOrderId": getattr(p, "source_presign_order_id", None) or "",
"paymentModelVersion": int(
getattr(p, "payment_model_version", None) or 1
),
"tenantNo": p.tenant_no,
"orderNum": p.order_num if p.order_num is not None else 0,
"remark": p.remark or "",
@@ -1387,6 +1394,25 @@ def get_protocol_detail_bundle(
out["paymentDetails"] = details_out
else:
out["paymentDetails"] = []
from app.crud import protocol_sample_payment as sp_pay_svc
from app.crud import protocol_refund_record as rr_svc
version = int(getattr(p, "payment_model_version", None) or 1)
if version >= 2:
out["samplePayments"] = sp_pay_svc.get_sample_payments_bundle(
db, protocol_id, tenant_no
)
else:
out["samplePayments"] = []
out["refundRecords"] = rr_svc.list_refund_records(
db, collection_protocol_id=protocol_id, tenant_no=tenant_no
)
out["presignDepositHint"] = sp_pay_svc.get_presign_deposit_hint(
db,
source_presign_order_id=getattr(p, "source_presign_order_id", None),
tenant_no=tenant_no,
)
return out
@@ -2304,6 +2330,9 @@ def create_collection_protocol(
health_survey_form_urls: Optional[str] = None,
register_date: Optional[str] = None,
collector_user_id: Optional[str] = None,
protocol_total_amount: Any = None,
source_presign_order_id: Optional[str] = None,
payment_model_version: Optional[int] = None,
remark: Optional[str] = None,
tenant_no: str = "zkxw",
user_id: Optional[str] = None,
@@ -2314,6 +2343,12 @@ def create_collection_protocol(
db, tenant_no=tenant_no, kind="collection", user_id=user_id
)
assert_biz_no_available(db, tenant_no=tenant_no, biz_no=pn)
version = int(payment_model_version) if payment_model_version is not None else 2
if version not in (1, 2):
version = 2
total_amt = None
if protocol_total_amount not in (None, ""):
total_amt = Decimal(str(protocol_total_amount))
obj = BizCollectionProtocol(
id=generate_uuid(),
protocol_no_id=(protocol_no_id or "").strip() or None,
@@ -2324,6 +2359,9 @@ def create_collection_protocol(
health_survey_form_urls=(health_survey_form_urls or "").strip() or None,
register_date=(register_date or "").strip() or None,
collector_user_id=(collector_user_id or "").strip() or None,
protocol_total_amount=total_amt,
source_presign_order_id=(source_presign_order_id or "").strip() or None,
payment_model_version=version,
tenant_no=tenant_no,
order_num=0,
remark=(remark or "").strip() or None,
@@ -2363,6 +2401,8 @@ def update_collection_protocol(
to_research_time: Optional[datetime] = None,
to_research_desc: Optional[str] = None,
collector_user_id: Optional[str] = None,
protocol_total_amount: Any = None,
source_presign_order_id: Optional[str] = None,
remark: Optional[str] = None,
) -> BizCollectionProtocol:
obj = get_collection_protocol(
@@ -2413,6 +2453,13 @@ def update_collection_protocol(
obj.to_research_desc = to_research_desc.strip() or None
if collector_user_id is not None:
obj.collector_user_id = collector_user_id.strip() or None
if protocol_total_amount is not None:
if protocol_total_amount == "":
obj.protocol_total_amount = None
else:
obj.protocol_total_amount = Decimal(str(protocol_total_amount))
if source_presign_order_id is not None:
obj.source_presign_order_id = (source_presign_order_id or "").strip() or None
if remark is not None:
obj.remark = remark.strip() or None
obj.update_by = user_id