From 0e2b43761f8d91de572e7e6f00d2ade05a89f99b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= <9664676+pengyuthon@user.noreply.gitee.com> Date: Fri, 16 Jan 2026 19:57:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- soong_workflow/models/soong_workflow_mixin.py | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py index 1d778acaf..3ca81249c 100644 --- a/soong_workflow/models/soong_workflow_mixin.py +++ b/soong_workflow/models/soong_workflow_mixin.py @@ -90,13 +90,25 @@ class SoongWorkflowMixin(models.AbstractModel): def _compute_is_back(self): for record in self: record.is_back = False - current_state = record.state - if not current_state or not record.log_ids: + current_uid = self.env.uid + user_matched_logs = record.log_ids.filtered( + lambda log: log.done_by.id == current_uid + ).sorted(key=lambda log: log.create_date) + if not user_matched_logs: continue - # 判断当前节点的状态 - matched_logs = record.log_ids.filtered(lambda log: log.name == current_state) - if matched_logs: - if matched_logs[-1].approval_state == '0': + + # 取当前登录人对应日志的最后一条(最新的) + current_user_last_log = user_matched_logs[-1] + all_sorted_logs = record.log_ids.sorted(key=lambda log: log.create_date) + all_sorted_list = record.log_ids.sorted(key=lambda log: log.create_date).ids + # 找到当前日志在所有日志中的索引 + try: + current_log_index = all_sorted_list.index(current_user_last_log.id) + except ValueError: + current_log_index = -1 + if current_log_index != -1 and (current_log_index + 1) < len(all_sorted_list): + next_log = all_sorted_logs[current_log_index + 1] + if next_log.approval_state == "0": record.is_back = True if record._name in ['yuthon.official.incoming.normal', 'yuthon.sub.enterprises']: current_user_in_logs2 = any(log.done_by.id == self.env.uid for log in record.log_ids2)