考勤机人脸
This commit is contained in:
@@ -25,6 +25,26 @@ class AttendanceIotUser(models.Model):
|
||||
|
||||
_sql_constraints = [('unique','UNIQUE(attendance_iot_id,employee_id)','一台设备不允许上传相同的员工信息')]
|
||||
|
||||
@staticmethod
|
||||
def _build_face_template(employee):
|
||||
"""从员工照片字段生成设备用的 face_template
|
||||
优先 avatar_image,其次 image_1920,压缩后返回 data:image/jpeg;base64, + URL编码
|
||||
"""
|
||||
raw = employee.avatar_image or employee.image_1920
|
||||
if not raw:
|
||||
return None
|
||||
try:
|
||||
# 可能是 JPEG bytes,也可能是 base64 文本
|
||||
# 尝试 base64 解码来判断
|
||||
b64decode = base64.b64decode(raw)
|
||||
# 解码成功 → raw 是 base64 文本
|
||||
source_b64 = raw.decode('ascii')
|
||||
except Exception:
|
||||
# 解码失败 → raw 是 JPEG 二进制,需要编码
|
||||
source_b64 = base64.b64encode(raw).decode('ascii')
|
||||
return urllib.parse.quote(
|
||||
f"data:image/jpeg;base64,{source_b64}", encoding='utf-8')
|
||||
|
||||
# def unlink(self):
|
||||
# if not self._context.get('iot_sync'):
|
||||
# # 下发删除信息
|
||||
@@ -61,18 +81,12 @@ class AttendanceIotUser(models.Model):
|
||||
'id_valid': r.id_valid.strftime('%Y-%m-%d') if r.id_valid else '',
|
||||
}
|
||||
# face_template 单独放最后
|
||||
if emp.compress_image:
|
||||
raw = emp.compress_image
|
||||
try:
|
||||
b64 = raw.decode('ascii')
|
||||
except UnicodeDecodeError:
|
||||
b64 = base64.b64encode(raw).decode('ascii')
|
||||
face_template = urllib.parse.quote(
|
||||
f"data:image/jpeg;base64,{b64}", encoding='utf-8')
|
||||
add_value['face_template'] = face_template
|
||||
_logger.info(f"addUser 携带 face_template,base64长度: {len(b64)}")
|
||||
face_tpl = self._build_face_template(emp)
|
||||
if face_tpl:
|
||||
add_value['face_template'] = face_tpl
|
||||
_logger.info(f"addUser 携带 face_template")
|
||||
else:
|
||||
_logger.warning(f"addUser 未携带 face_template,compress_image 为空")
|
||||
_logger.warning(f"addUser 未携带 face_template,员工无照片")
|
||||
self.env['iot.message'].create([{
|
||||
'name': '增加用户',
|
||||
'topic': f'iot/device/{r.attendance_iot_id.name}',
|
||||
@@ -99,18 +113,12 @@ class AttendanceIotUser(models.Model):
|
||||
'id_valid': record.id_valid.strftime('%Y-%m-%d') if record.id_valid else '',
|
||||
}
|
||||
# face_template 单独放最后
|
||||
if emp.compress_image:
|
||||
raw = emp.compress_image
|
||||
try:
|
||||
b64 = raw.decode('ascii')
|
||||
except UnicodeDecodeError:
|
||||
b64 = base64.b64encode(raw).decode('ascii')
|
||||
face_template = urllib.parse.quote(
|
||||
f"data:image/jpeg;base64,{b64}", encoding='utf-8')
|
||||
update_value['face_template'] = face_template
|
||||
_logger.info(f"editUser 携带 face_template,base64长度: {len(b64)}")
|
||||
face_tpl = self._build_face_template(emp)
|
||||
if face_tpl:
|
||||
update_value['face_template'] = face_tpl
|
||||
_logger.info(f"editUser 携带 face_template")
|
||||
else:
|
||||
_logger.warning(f"editUser 未携带 face_template,compress_image 为空")
|
||||
_logger.warning(f"editUser 未携带 face_template,员工无照片")
|
||||
_logger.info(f"action_update_iot_info--{update_value}")
|
||||
self.env['iot.message'].create([{
|
||||
'name': '修改用户信息',
|
||||
|
||||
Reference in New Issue
Block a user