Skip to content

Commit

Permalink
Merge pull request #412 from 0RAJA/feat_strategy_new
Browse files Browse the repository at this point in the history
feat: 风险单详情展示二期 --story=118188959
  • Loading branch information
OrenZhang authored Aug 15, 2024
2 parents aa798dd + 7d654eb commit fde6031
Showing 1 changed file with 27 additions and 23 deletions.
50 changes: 27 additions & 23 deletions src/backend/services/web/risk/handlers/risk.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from django.db.models import Q, QuerySet
from django.utils import timezone
from django.utils.translation import gettext
from jinja2.exceptions import UndefinedError
from jinja2 import UndefinedError
from rest_framework.settings import api_settings

from apps.meta.models import GlobalMetaConfig
Expand All @@ -46,7 +46,7 @@
from services.web.risk.handlers import EventHandler
from services.web.risk.models import Risk
from services.web.risk.render import RiskTitleUndefined
from services.web.risk.serializers import CreateRiskSerializer, RiskInfoSerializer
from services.web.risk.serializers import CreateRiskSerializer
from services.web.strategy_v2.models import Strategy, StrategyTag


Expand Down Expand Up @@ -103,33 +103,50 @@ def load_events(self, start_time: datetime.datetime, end_time: datetime.datetime

return data

def render_risk_title(self, risk: Risk) -> Optional[str]:
@classmethod
def render_risk_title(cls, create_params: dict) -> Optional[str]:
"""
生成风险标题
"""

strategy: Strategy = Strategy.objects.filter(strategy_id=risk.strategy_id).first()
strategy: Strategy = Strategy.objects.filter(strategy_id=create_params["strategy_id"]).first()
if not strategy or not strategy.risk_title:
return
risk_content = RiskInfoSerializer(risk).data
# 事件证据为字符串需要转换成列表,并取第一条字典数据
try:
event_evidence = json.loads(risk.event_evidence)[0]
event_evidence = json.loads(create_params["event_evidence"])[0]
except (json.JSONDecodeError, IndexError, KeyError):
event_evidence = {}
risk_content["event_evidence"] = event_evidence
create_params["event_evidence"] = event_evidence
try:
risk_title = Jinja2Renderer(undefined=RiskTitleUndefined).jinja_render(strategy.risk_title, risk_content)
risk_title = Jinja2Renderer(undefined=RiskTitleUndefined).jinja_render(strategy.risk_title, create_params)
return risk_title
except UndefinedError as err:
logger.exception(
"[RenderRiskTitleFailed] risk_title: %s; risk_content: %s; err: %s",
strategy.risk_title,
risk_content,
create_params,
err,
)
return strategy.risk_title

def gen_risk_create_params(self, event: dict) -> dict:
create_params = {
"event_content": event.get("event_content"),
"raw_event_id": event["raw_event_id"],
"strategy_id": event["strategy_id"],
"event_evidence": event.get("event_evidence"),
"event_type": self.parse_event_type(event.get("event_type")),
"event_data": event.get("event_data"),
"event_time": datetime.datetime.fromtimestamp(event["event_time"] / 1000),
"event_end_time": datetime.datetime.fromtimestamp(event["event_time"] / 1000),
"event_source": event.get("event_source"),
"operator": self.parse_operator(event.get("operator")),
"tags": list(StrategyTag.objects.filter(strategy_id=event["strategy_id"]).values_list("tag_id", flat=True)),
}
create_params["title"] = self.render_risk_title(create_params)
return create_params

def create_risk(self, event: dict) -> (bool, Risk):
"""
创建或更新风险
Expand Down Expand Up @@ -174,20 +191,7 @@ def create_risk(self, event: dict) -> (bool, Risk):
return False, None

# 不存在则创建
return True, Risk.objects.create(
event_content=event.get("event_content"),
raw_event_id=event["raw_event_id"],
strategy_id=event["strategy_id"],
event_evidence=event.get("event_evidence"),
event_type=self.parse_event_type(event.get("event_type")),
event_data=event.get("event_data"),
event_time=datetime.datetime.fromtimestamp(event["event_time"] / 1000),
event_end_time=datetime.datetime.fromtimestamp(event["event_time"] / 1000),
event_source=event.get("event_source"),
operator=self.parse_operator(event.get("operator")),
tags=list(StrategyTag.objects.filter(strategy_id=event["strategy_id"]).values_list("tag_id", flat=True)),
title=self.render_risk_title(risk),
)
return True, Risk.objects.create(**self.gen_risk_create_params(event))

def parse_operator(self, operator: str) -> List[str]:
operator = operator or ""
Expand Down

0 comments on commit fde6031

Please sign in to comment.