From 805e26300c7a87a5fbe3479ad69a35567b62e4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Fri, 29 May 2026 14:06:44 +0800 Subject: [PATCH] =?UTF-8?q?ai=E5=8A=A8=E6=80=81=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yuthon_notice/models/yuthon_notice.py | 43 ++++++++++++++------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/yuthon_notice/models/yuthon_notice.py b/yuthon_notice/models/yuthon_notice.py index 500f6e010..fd5be2cea 100644 --- a/yuthon_notice/models/yuthon_notice.py +++ b/yuthon_notice/models/yuthon_notice.py @@ -217,10 +217,24 @@ class YuthonNotice(models.Model): # 对用户列表去重,防止重复发送 unique_user_ids = list(set(self.users_ids.ids)) _logger.info(f"公告 {self.name} (ID: {self.id}) 准备发送给 {len(unique_user_ids)} 个用户") + + # 查询已存在的确认记录,用于去重 + existing_confirm = self.env['yuthon.confirm.users'].sudo().search([ + ('notice_id', '=', self.id), + ('notice_code', '=', self.code), + ]) + existing_emp_ids = set(existing_confirm.mapped('employee_id.id')) + for user_id in unique_user_ids: employee = self.env['hr.employee'].sudo().search([('user_id', '=', user_id)], limit=1) if not employee: continue + + # 方案B:用户级别去重——已存在确认记录的,不再重复发送 + if employee.id in existing_emp_ids: + _logger.info(f"用户 {employee.name} 的确认记录已存在,跳过发送") + continue + url = f'https://phone.thtzjt.com/phone/Notice/{self.id}?employee_id={employee.id}' result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard( category='notice', @@ -241,26 +255,15 @@ class YuthonNotice(models.Model): for mapping in user_wecom_mapping: emp_id = mapping['emp_id'] msg_id = mapping['msg_id'] - is_exist = self.env['yuthon.confirm.users'].sudo().search([ - ('notice_id', '=', self.id), - ('notice_code', '=', self.code), - ('employee_id', '=', emp_id) - ], limit=1) - if not is_exist: - self.env['yuthon.confirm.users'].sudo().create({ - 'notice_id': self.id, - 'employee_id': emp_id, - 'notice_code': self.code, - 'notice_name': self.name, - 'release_date': self.create_date1, - 'state': 'no', - 'msg_id': msg_id, - }) - else: - is_exist.sudo().write({ - 'state': 'no', - 'msg_id': msg_id, - }) + self.env['yuthon.confirm.users'].sudo().create({ + 'notice_id': self.id, + 'employee_id': emp_id, + 'notice_code': self.code, + 'notice_name': self.name, + 'release_date': self.create_date1, + 'state': 'no', + 'msg_id': msg_id, + }) def look_up_notice_users(self): return {