From 81aa49d3390f07918636e00b6fdf5c492a6626d1 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 2 Dec 2025 09:56:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=8E=B7=E5=8F=96batchlog=20dag?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=94=AF=E6=8C=81=E4=B8=B4=E8=BF=91=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/services.py | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 27ea58fa..bb6f1335 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -1081,11 +1081,49 @@ def get_batch_dag(batch_number: str, method="full"): logs = BatchLog.objects.filter(Q(source__id=batch_ins.id) | Q(target__id=batch_ins.id)).select_related( "source", "target" ).order_by("update_time") - + + exist_log_ids = [] + left_source_ids = [] + right_target_ids = [] for log in logs: + exist_log_ids.append(log.id) source = log.source.id target = log.target.id - nodes_set.update([source, target]) + if source == batch_ins.id: + right_target_ids.append(target) + nodes_set.add(target) + if target == batch_ins.id: + left_source_ids.append(source) + nodes_set.add(source) + edges.append({ + 'id': log.id, + 'source': source, + 'target': target, + "handover": log.handover.id if log.handover else None, + "mlog": log.mlog.id if log.mlog else None, + 'label': r_dict.get(log.relation_type, ""), + }) + + # 查询作为source的其他关系 + leftLogs = BatchLog.objects.filter(source_id__in=left_source_ids).exclude(id__in=exist_log_ids) + for log in leftLogs: + source = log.source.id + target = log.target.id + nodes_set.add(log.target.id) + edges.append({ + 'id': log.id, + 'source': source, + 'target': target, + "handover": log.handover.id if log.handover else None, + "mlog": log.mlog.id if log.mlog else None, + 'label': r_dict.get(log.relation_type, ""), + }) + + rightLogs = BatchLog.objects.filter(target_id__in=right_target_ids).exclude(id__in=exist_log_ids) + for log in rightLogs: + source = log.source.id + target = log.target.id + nodes_set.add(log.source.id) edges.append({ 'id': log.id, 'source': source,