39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
"""fin_transaction 成交流水仓储:按客户查历史流水(规则引擎聚合规则用)。"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import func, select
|
|
|
|
from model.fin_transaction import FinTransaction
|
|
from repositories.base import BaseRepository
|
|
|
|
|
|
class FinTransactionRepo(BaseRepository):
|
|
model = FinTransaction
|
|
|
|
async def list_since(
|
|
self, customer_id: int, since: datetime
|
|
) -> list[FinTransaction]:
|
|
"""查该客户 since 之后的所有成交流水,按成交时间升序。
|
|
|
|
供规则引擎聚合规则(R005~R013 等)在内存中做窗口统计。
|
|
"""
|
|
stmt = (
|
|
select(FinTransaction)
|
|
.where(
|
|
FinTransaction.customer_id == customer_id,
|
|
FinTransaction.create_time >= since,
|
|
)
|
|
.order_by(FinTransaction.create_time, FinTransaction.id)
|
|
)
|
|
return list((await self.db.scalars(stmt)).all())
|
|
|
|
async def get_last_transaction_time(self, customer_id: int) -> datetime | None:
|
|
"""该客户最近一笔成交时间(R016 休眠账户激活判定用)。"""
|
|
return await self.db.scalar(
|
|
select(func.max(FinTransaction.create_time)).where(
|
|
FinTransaction.customer_id == customer_id
|
|
)
|
|
)
|