接入异常账户基线同步触发点
This commit is contained in:
@@ -136,6 +136,11 @@ class FileRecord:
|
||||
abnormal_accounts: List[dict] = field(default_factory=list)
|
||||
|
||||
|
||||
class _NoopAbnormalAccountBaselineService:
|
||||
def apply(self, staff_id_card: str, abnormal_accounts: List[dict]) -> None:
|
||||
return None
|
||||
|
||||
|
||||
class FileService:
|
||||
"""文件上传和解析服务"""
|
||||
|
||||
@@ -143,11 +148,19 @@ class FileService:
|
||||
LOG_ID_MIN = settings.INITIAL_LOG_ID
|
||||
LOG_ID_MAX = 99999
|
||||
|
||||
def __init__(self, staff_identity_repository=None, phase2_baseline_service=None):
|
||||
def __init__(
|
||||
self,
|
||||
staff_identity_repository=None,
|
||||
phase2_baseline_service=None,
|
||||
abnormal_account_baseline_service=None,
|
||||
):
|
||||
self.file_records: Dict[int, FileRecord] = {} # logId -> FileRecord
|
||||
self.log_counter = settings.INITIAL_LOG_ID
|
||||
self.staff_identity_repository = staff_identity_repository or StaffIdentityRepository()
|
||||
self.phase2_baseline_service = phase2_baseline_service or Phase2BaselineService()
|
||||
self.abnormal_account_baseline_service = (
|
||||
abnormal_account_baseline_service or _NoopAbnormalAccountBaselineService()
|
||||
)
|
||||
|
||||
def get_file_record(self, log_id: int) -> FileRecord:
|
||||
"""按 logId 获取已存在的文件记录。"""
|
||||
@@ -452,6 +465,17 @@ class FileService:
|
||||
baseline_rule_codes=baseline_rule_codes,
|
||||
)
|
||||
|
||||
def _apply_abnormal_account_baselines(self, file_record: FileRecord) -> None:
|
||||
"""按当前记录命中的异常账户规则幂等补齐账户事实。"""
|
||||
if not file_record.abnormal_account_hit_rules:
|
||||
return
|
||||
if not file_record.abnormal_accounts:
|
||||
raise RuntimeError("异常账户命中计划存在,但未生成账户事实")
|
||||
self.abnormal_account_baseline_service.apply(
|
||||
staff_id_card=file_record.staff_id_card,
|
||||
abnormal_accounts=file_record.abnormal_accounts,
|
||||
)
|
||||
|
||||
async def upload_file(
|
||||
self, group_id: int, file: UploadFile, background_tasks: BackgroundTasks
|
||||
) -> Dict:
|
||||
@@ -513,7 +537,7 @@ class FileService:
|
||||
),
|
||||
)
|
||||
|
||||
# 存储记录
|
||||
self._apply_abnormal_account_baselines(file_record)
|
||||
self.file_records[log_id] = file_record
|
||||
self._rebalance_all_mode_group_rule_plans(group_id)
|
||||
self._apply_phase2_baselines(file_record)
|
||||
@@ -851,6 +875,7 @@ class FileService:
|
||||
parsing=False,
|
||||
)
|
||||
|
||||
self._apply_abnormal_account_baselines(file_record)
|
||||
self.file_records[log_id] = file_record
|
||||
self._rebalance_all_mode_group_rule_plans(group_id)
|
||||
self._apply_phase2_baselines(file_record)
|
||||
|
||||
Reference in New Issue
Block a user