From 6a83bf03acd8d96a83fa13570915a04579f262b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Fri, 25 Jul 2025 17:51:34 +0800 Subject: [PATCH 1/2] 1 --- yuthon_hr_attendance/models/hr_attendance.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py index 9393e71d9..6cfd09e15 100644 --- a/yuthon_hr_attendance/models/hr_attendance.py +++ b/yuthon_hr_attendance/models/hr_attendance.py @@ -138,11 +138,9 @@ class HrAttendance(models.Model): for emp in abnormal_employees: url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance&view_type=list&menu_id={menu_id.id}' - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', - user_id=emp.wecom_userid, - title="打卡异常提醒", - description="您本月有打卡异常".format( - url=url, btntxt="详细信息")) + self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att', user_id=emp.wecom_userid, + title="打卡异常提醒", description="您本月有打卡异常", + url=url, btntxt="详细信息") @api.depends('employee_id', 'check_in', 'check_out') From 071e96d9fea1d4284f6e851cef2bae6dbfcc81d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Fri, 25 Jul 2025 18:20:35 +0800 Subject: [PATCH 2/2] 1 --- yuthon_hr_attendance/models/hr_attendance.py | 9 +++++++-- .../models/hr_attendance_detail_wechat.py | 10 +++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py index 6cfd09e15..a4088da47 100644 --- a/yuthon_hr_attendance/models/hr_attendance.py +++ b/yuthon_hr_attendance/models/hr_attendance.py @@ -66,6 +66,13 @@ class HrAttendance(models.Model): 'domain': [('id', '=', self.workflow_id.id)], } + def compute_attendance_ids(self): + attendance_ids = self.env["hr.attendance"].browse(self._context.get('active_ids', self._context.get('active_id'))) + for att in attendance_ids: + now_time = fields.Datetime.to_datetime(att.current_data) + timedelta(hours=8, days=1) + start_time = now_time - timedelta(days=2) + self.env["hr.attendance.detail"].get_hr_attendance_time(att.employee_id, now_time, start_time) + @api.depends('current_data') def _compute_month_status(self): today = fields.Date.today() @@ -135,14 +142,12 @@ class HrAttendance(models.Model): if has_abnormal: if employee.id not in [emp.id for emp in abnormal_employees]: abnormal_employees.append(employee) - for emp in abnormal_employees: url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance&view_type=list&menu_id={menu_id.id}' self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att', user_id=emp.wecom_userid, title="打卡异常提醒", description="您本月有打卡异常", url=url, btntxt="详细信息") - @api.depends('employee_id', 'check_in', 'check_out') def _compute_display_name(self): for attendance in self: diff --git a/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py b/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py index 8b1e6df25..c8d23e5d8 100644 --- a/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py +++ b/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py @@ -86,7 +86,9 @@ class HrAttendanceDetail(models.Model): def create(self, vals_list): res = super(HrAttendanceDetail, self).create(vals_list) employee_id = self.env['hr.employee'].search([('id', '=', vals_list[0]['employee_id'])]) - self.get_hr_attendance_time(employee_id) + now_time = datetime.now() + timedelta(hours=8, days=1) + start_time = now_time - timedelta(days=1) + self.get_hr_attendance_time(employee_id, now_time, start_time) return res # # def write(self, vals): @@ -256,16 +258,13 @@ class HrAttendanceDetail(models.Model): _logger.error('检查保存之前的数据分析出想要的数据失败,异常:{0},数据信息{1},异常详情:{2}'.format(str(e), str(data), str(traceback.format_exc()))) - def get_hr_attendance_time(self, employee_id): + def get_hr_attendance_time(self, employee_id, now_time, start_time): """ 获取企业微信打卡数据的核心逻辑 :return: 处理结果 """ # 从用户列表里获取企业微信的用户 # user_list = self._get_wx_attendance_user_list() - now_time = datetime.now() + timedelta(hours=8, days=1) - start_time = now_time - timedelta(days=1) - # 企业微信获取打卡数据,要求用户分组100,分批获取打卡记录 # for userid_limit in self.utils_list_page(user_list, 100): # # 获取企业微信的打卡信息 @@ -302,6 +301,7 @@ class HrAttendanceDetail(models.Model): # employee_list = [emp.name for emp in employee_ids] # user_obj = self.sudo().env['res.users'].search([('name', 'not in', ['Administrator', '李鹏宇'] + employee_list), # ('employee_id.contract_id', '!=', False)]).sorted('id') + user_obj = self.sudo().env['res.users'].search([('id', '=', employee_id.user_id.id)]) # 暂时先用for循环,如果后期加大频率,需改成并发 total_users = len(user_obj)