!11862 Merge remote-tracking branch 'origin/dev' into dev

Merge pull request !11862 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2026-06-03 03:07:03 +00:00
committed by Gitee
2 changed files with 66 additions and 16 deletions
+25 -2
View File
@@ -44,13 +44,26 @@ class IotMessage(models.Model):
default='draft')
# 响应信息
res_data = fields.Text(string='发送后的响应信息')
face_data = fields.Text(string='照片数据')
@api.model_create_multi
def create(self, vals_list):
# 保留全部数据(含 face_template),MQTT 下发时需要原样发给设备
records = super().create(vals_list)
# 创建设备日志时同步更新关联设备的最后更新时间
# 从 message_data 提取 face_template 存入单独字段,并在 message_data 中移除
for rec in records:
if rec.message_data:
try:
data = json.loads(rec.message_data)
if isinstance(data, dict) and 'face_template' in data:
face_tpl = data.pop('face_template')
rec.write({
'face_data': face_tpl,
'message_data': json.dumps(data, ensure_ascii=False),
})
except (json.JSONDecodeError, TypeError):
pass
# 创建设备日志时同步更新关联设备的最后更新时间
if rec.device_sn:
devices = self.env['attendance.iot'].sudo().search([('name', '=', rec.device_sn)], limit=1)
if devices:
@@ -119,10 +132,20 @@ class IotMessage(models.Model):
result = []
for record in records:
msg_data = record.message_data
# 如果有独立存的面部照片,重新拼回去下发
if record.face_data:
try:
data = json.loads(msg_data) if msg_data else {}
if isinstance(data, dict):
data['face_template'] = record.face_data
msg_data = json.dumps(data, ensure_ascii=False)
except (json.JSONDecodeError, TypeError):
pass
result.append({
'id': record.id,
'topic': record.topic,
'message_data': record.message_data
'message_data': msg_data
})
records.write({'state': 'waiting'})
return result
+41 -14
View File
@@ -7,7 +7,7 @@
<field name="name">iot.message.tree</field>
<field name="model">iot.message</field>
<field name="arch" type="xml">
<tree string="Iot 消息" default_order="create_date desc" limit="10">
<tree string="Iot 消息" default_order="create_date desc" limit="5">
<header>
<button name="action_clear_face_template" string="清除 face_template" type="object"/>
</header>
@@ -15,9 +15,9 @@
<field name="topic" column_invisible="1"/>
<field name="device_sn"/>
<field name="create_date" string="创建日期"/>
<field name="message_data" optional="show"/>
<field name="message_data" column_invisible="1"/>
<field name="state"/>
<field name="res_data" optional="hide"/>
<field name="res_data" optional="show"/>
</tree>
</field>
</record>
@@ -35,17 +35,44 @@
</field>
</record>
<record id="iot_message_act_window" model="ir.actions.act_window">
<field name="name">Iot 消息</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">iot.message</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
There is no examples click here to add new Iot 消息.
</p>
</field>
</record>
<record id="iot_message_act_window" model="ir.actions.act_window">
<field name="name">Iot 消息</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">iot.message</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
There is no examples click here to add new Iot 消息.
</p>
</field>
</record>
<record id="iot_message_form_view" model="ir.ui.view">
<field name="name">iot.message.form</field>
<field name="model">iot.message</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name"/>
<field name="device_sn"/>
<field name="state"/>
<field name="topic"/>
<field name="create_date" string="创建日期"/>
</group>
<group string="请求参数">
<field name="message_data" nolabel="1"/>
</group>
<group string="照片数据" groups="base.group_system">
<field name="face_data" nolabel="1"/>
</group>
<group string="响应结果">
<field name="res_data" nolabel="1"/>
</group>
</sheet>
</form>
</field>
</record>
</data>
</odoo>