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 {