From f2326b84df67d178ea4b96356926834cb73de081 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: Wed, 29 Jul 2026 11:21:37 +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_log.py | 1 + .../wizard/soong_workflow_comment_wizard.py | 69 +++++++++++-------- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/soong_workflow/models/soong_workflow_log.py b/soong_workflow/models/soong_workflow_log.py index 8561b916b..220529537 100644 --- a/soong_workflow/models/soong_workflow_log.py +++ b/soong_workflow/models/soong_workflow_log.py @@ -23,6 +23,7 @@ class SoongWorkflowLog(models.Model): node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button", string="动作名称") node_btn_name = fields.Selection([('0', ' '), ('1', '退回'), ('2', '加签'), ('3', '串'), ('4', '并'), ('5', '董事长'), ('6', '承办')], store=True, string='节点功能', default='0') done_by = fields.Many2one(comodel_name="res.users", string="审批人") + add_sign_by = fields.Many2one(comodel_name="res.users", string="加签发起人") lase_click_date = fields.Datetime(string="操作时间") approval_state = fields.Selection([('0', '待办'), ('1', '办理中'), ('2', '已办结'), ('3', '结束')], string='状态', default='0') comment = fields.Text(string="意见") diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index 9f8ec0936..8797141ef 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -557,7 +557,8 @@ class SoongWorkflowCommentWizard(models.TransientModel): ]) workflow_record_id.is_log2 = True description = "标题: {}\n".format(record_id.name) + self.env.user.name + ' ' + str(fields.Datetime.now() + timedelta(hours=8)) - workflow_record_id.employee2_ids = [(6, 0, self.circulated_employee_ids.ids)] + workflow_record_id.employee2_ids = [(6, 0, self.circulated_employee_ids.ids)] + title = record_id._description if 'Room Booking' == title: title = '会议通知' @@ -658,6 +659,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): "node_id": self.node_btn_id.node_id.id, "workflow_id": self.node_btn_id.workflow_id.id, "done_by": employee_id.user_id.id, + "add_sign_by": self.env.user.id, "node_btn_id": self.node_btn_id.id, "approval_state": "0", }) @@ -709,52 +711,59 @@ class SoongWorkflowCommentWizard(models.TransientModel): }) log_obj = self.sudo().env["soong.workflow.log"] node_id = self.node_btn_id.node_id.id - last_sign_log = log_obj.search([ - ("model", "=", self.res_model), - ("res_id", "=", self.res_id), - ("name", "=", "归档"), - ], order="create_date DESC", limit=1) - # 没找到归档,再取原来的最后一条(非加签) - if not last_sign_log: + # 从当前加签 log 上读取加签发起人 + add_sign_user = current_node_log.add_sign_by + if not add_sign_user: + # 兼容旧数据:没有 add_sign_by 的,走原来的排序逻辑 last_sign_log = log_obj.search([ ("model", "=", self.res_model), ("res_id", "=", self.res_id), - ('approval_state', "=", '2'), - ("name", "!=", "加签"), - ], order="lase_click_date DESC")[0] + ("name", "=", "归档"), + ], order="create_date DESC", limit=1) + if not last_sign_log: + last_sign_log = log_obj.search([ + ("model", "=", self.res_model), + ("res_id", "=", self.res_id), + ('approval_state', "=", '2'), + ("name", "!=", "加签"), + ], order="lase_click_date DESC")[0] + if not last_sign_log: + return + add_sign_user = last_sign_log.done_by - # 如果没有加签日志,直接跳过 - if not last_sign_log: - return + # 查找发起人在该节点上的原始 log(非加签),确定返回的 name(如"归档") + origin_log = log_obj.search([ + ("model", "=", self.res_model), + ("res_id", "=", self.res_id), + ("node_id", "=", node_id), + ("done_by", "=", add_sign_user.id), + ("name", "!=", "加签"), + ("approval_state", "=", "2"), + ], order="create_date DESC", limit=1) + log_name = origin_log.name if origin_log and origin_log.name == '归档' else False - # 最新加签的经办人 - last_sign_user = last_sign_log.done_by - - # 2. 找到当前节点所有日志(排除最新加签那条) - all_logs = log_obj.search([ + # 查找同一批次的加签 log(同一个发起人、同一个节点) + batch_logs = log_obj.search([ ("model", "=", self.res_model), ("res_id", "=", self.res_id), ("node_id", "=", node_id), ("name", "=", "加签"), - ("id", "!=", user_log.id), + ("add_sign_by", "=", add_sign_user.id), ]) - # 其他人是否都完成了 - all_other_done = all(log.approval_state == "2" for log in all_logs) - # 4. 如果满足 → 创建一条新日志给【最新加签的经办人】 - if all_other_done: - # 判断是否需要设置为归档 - log_name = last_sign_log.name if last_sign_log.name == '归档' else False + # 是否都完成了 + all_done = all(log.approval_state == "2" for log in batch_logs) + # 如果都完成 → 创建一条新日志给加签发起人 + if all_done: log_vals = { "model": self.res_model, "res_id": self.res_id, "workflow_id": self.node_btn_id.workflow_id.id, - "node_id": last_sign_log.node_id.id, - "done_by": last_sign_user.id, + "node_id": node_id, + "done_by": add_sign_user.id, "approval_state": "0", "create_date": fields.Datetime.now(), } - # 如果是归档,自动写入 name = 归档 if log_name: log_vals["name"] = log_name log_obj.create(log_vals) @@ -764,7 +773,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): ]) url = f'https://oa.thtzjt.com/web#id={record_id.id}&cids=2&menu_id={record_id.id}&action={action_id.id}&model={self.res_model}&view_type=form' self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', - user_id=last_sign_user.employee_ids.wecom_userid, + user_id=add_sign_user.employee_ids.wecom_userid, title=record_id._description + '加签返回', description=description, url=url, btntxt="查看详情")