From 35d33de72a69de317dfa35f34975ff7d8d1de5b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Wed, 3 Jun 2026 10:53:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=E6=9C=BA=E4=BA=BA=E8=84=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- attendance_iot/models/attendance_iot_user.py | 49 +++++++++++--------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/attendance_iot/models/attendance_iot_user.py b/attendance_iot/models/attendance_iot_user.py index 50e715a5d..07a905b5b 100644 --- a/attendance_iot/models/attendance_iot_user.py +++ b/attendance_iot/models/attendance_iot_user.py @@ -50,25 +50,26 @@ class AttendanceIotUser(models.Model): if self._context.get('iot_sync'): return res for r in res: - # 创建下发信息 - # 头像, 压缩的图片 data:image/jpeg;base64, - # + emp = r.employee_id add_value = { 'cmd': 'addUser', - 'user_id': f'{r.employee_id.mobile_phone}', - 'name': r.employee_id.name + 'user_id': f'{emp.mobile_phone}', + 'name': emp.name, + 'phone': emp.mobile_phone or '', + 'id_card': emp.identification_id or '', + 'effect_time': emp.entry_date.strftime('%Y-%m-%d') if emp.entry_date else '', + 'id_valid': r.id_valid.strftime('%Y-%m-%d') if r.id_valid else '', } - if r.employee_id.compress_image: - raw = r.employee_id.compress_image - # compress_image 可能是原图 bytes,也可能是 base64 bytes,需要兼容 + # face_template 单独放最后 + if emp.compress_image: + raw = emp.compress_image try: - b64 = raw.decode('ascii') # 已经是 base64 文本 + b64 = raw.decode('ascii') except UnicodeDecodeError: - b64 = base64.b64encode(raw).decode('ascii') # 原图 bytes,编码 - # 设备要求:data:image/jpeg;base64, + base64 再 URL 编码 + b64 = base64.b64encode(raw).decode('ascii') face_template = urllib.parse.quote( f"data:image/jpeg;base64,{b64}", encoding='utf-8') - add_value.update({'face_template': face_template}) + add_value['face_template'] = face_template self.env['iot.message'].create([{ 'name': '增加用户', 'topic': f'iot/device/{r.attendance_iot_id.name}', @@ -82,24 +83,28 @@ class AttendanceIotUser(models.Model): if self._context.get('iot_sync'): return for record in self: - # 下发信息 + emp = record.employee_id + # 下发信息 - 完整传参 update_value = { 'cmd': 'editUser', 'edit_mode': 1, - 'user_id': f'{record.employee_id.mobile_phone}', - 'name': record.employee_id.name + 'user_id': f'{emp.mobile_phone}', + 'name': emp.name, + 'phone': emp.mobile_phone or '', + 'id_card': emp.identification_id or '', + 'effect_time': emp.entry_date.strftime('%Y-%m-%d') if emp.entry_date else '', + 'id_valid': record.id_valid.strftime('%Y-%m-%d') if record.id_valid else '', } - if record.employee_id.compress_image: - raw = record.employee_id.compress_image - # compress_image 可能是原图 bytes,也可能是 base64 bytes,需要兼容 + # face_template 单独放最后 + if emp.compress_image: + raw = emp.compress_image try: - b64 = raw.decode('ascii') # 已经是 base64 文本 + b64 = raw.decode('ascii') except UnicodeDecodeError: - b64 = base64.b64encode(raw).decode('ascii') # 原图 bytes,编码 - # 设备要求:data:image/jpeg;base64, + base64 再 URL 编码 + b64 = base64.b64encode(raw).decode('ascii') face_template = urllib.parse.quote( f"data:image/jpeg;base64,{b64}", encoding='utf-8') - update_value.update({'face_template': face_template}) + update_value['face_template'] = face_template _logger.info(f"action_update_iot_info--{update_value}") self.env['iot.message'].create([{ 'name': '修改用户信息',