From 4eff73f6befa97fdfb9b2854e22f00aeda47bd3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?=
<9664676+pengyuthon@user.noreply.gitee.com>
Date: Thu, 8 Jan 2026 18:41:43 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
soong_workflow/models/soong_workflow_log.py | 3 +-
.../templates/soong_workflow_templates.xml | 95 ++++++++++++++++++-
.../views/soong_workflow_log_views.xml | 49 +---------
.../views/soong_workflow_record.xml | 4 +-
soong_workflow/wizard/soong_bounced_wizard.py | 4 +
.../wizard/soong_workflow_comment_wizard.py | 30 ++++--
yuthon_wechat/models/wecom_apps.py | 5 +
yuthon_will_task/models/yuthon_will_task.py | 2 +-
8 files changed, 130 insertions(+), 62 deletions(-)
diff --git a/soong_workflow/models/soong_workflow_log.py b/soong_workflow/models/soong_workflow_log.py
index 696630ac5..da6211b23 100644
--- a/soong_workflow/models/soong_workflow_log.py
+++ b/soong_workflow/models/soong_workflow_log.py
@@ -19,6 +19,7 @@ class SoongWorkflowLog(models.Model):
workflow_id = fields.Many2one(comodel_name="soong.workflow")
node_id = fields.Many2one(comodel_name="soong.workflow.node")
+ msg_id = fields.Char(string="Msg_id")
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button", string="动作名称")
node_btn_name = fields.Selection([('0', ' '), ('1', '退回'), ('2', '加签'), ('3', '串'), ('4', '并'), ('5', '董事长'), ('6', '承办')], store=True, string='节点功能', default='0')
done_by = fields.Many2one(comodel_name="res.users", string="审批人")
@@ -78,7 +79,7 @@ class SoongWorkflowLog2(models.Model):
res_id = fields.Integer(string="Related Document ID", index=True, required=True)
node_id = fields.Many2one(comodel_name="soong.workflow.node")
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button", string="动作名称")
-
+ msg_id = fields.Char(string="Msg_id")
sequence = fields.Integer(string="序号", compute="_compute_sequence")
done_by = fields.Many2one(comodel_name="res.users", string="审批人")
name = fields.Char(string="节点名称", compute="_compute_name", store=True)
diff --git a/soong_workflow/templates/soong_workflow_templates.xml b/soong_workflow/templates/soong_workflow_templates.xml
index 8f4ecdd2b..efe2bd1c1 100644
--- a/soong_workflow/templates/soong_workflow_templates.xml
+++ b/soong_workflow/templates/soong_workflow_templates.xml
@@ -17,7 +17,7 @@
-
+
@@ -32,9 +32,9 @@
-
+
-
+
@@ -85,7 +85,7 @@
-
+
@@ -120,4 +120,91 @@
+
+ soong.workflow.log.kanban
+ soong.workflow.log
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 节点:
+
+
+
+
+ 状态:
+
+
+
+
+ 经办人:
+
+
+
+
+ 意见:
+
+
+
+
+ 附件:
+
+
+
+
+
+
+
+
+
+
+ soong.workflow.log2.kanban
+ soong.workflow.log2
+
+
+
+
+
+
+
+
+
+
+
+
+ 姓名:
+
+
+
+
+ 意见:
+
+
+
+
+ 状态:
+
+
+
+
+ 时间:
+
+
+
+
+
+
+
+
+
diff --git a/soong_workflow/views/soong_workflow_log_views.xml b/soong_workflow/views/soong_workflow_log_views.xml
index 58d2f4210..f44ac9750 100644
--- a/soong_workflow/views/soong_workflow_log_views.xml
+++ b/soong_workflow/views/soong_workflow_log_views.xml
@@ -1,52 +1,5 @@
-
- soong.workflow.log.kanban
- soong.workflow.log
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 节点:
-
-
-
-
- 状态:
-
-
-
-
- 经办人:
-
-
-
-
- 意见:
-
-
-
-
- 附件:
-
-
-
-
-
-
-
-
-
soong.workflow.log.tree
@@ -59,6 +12,7 @@
+
@@ -82,6 +36,7 @@
+
diff --git a/soong_workflow/views/soong_workflow_record.xml b/soong_workflow/views/soong_workflow_record.xml
index 91ecca53d..d3a7ec46c 100644
--- a/soong_workflow/views/soong_workflow_record.xml
+++ b/soong_workflow/views/soong_workflow_record.xml
@@ -176,8 +176,8 @@
-
+
+
diff --git a/soong_workflow/wizard/soong_bounced_wizard.py b/soong_workflow/wizard/soong_bounced_wizard.py
index a57e0a237..90a4eb58f 100644
--- a/soong_workflow/wizard/soong_bounced_wizard.py
+++ b/soong_workflow/wizard/soong_bounced_wizard.py
@@ -43,8 +43,12 @@ class SoongBouncedWizard(models.Model):
"users_ids": [(6, 0, done_by_list)],
'soong_state': 'to_do'
})
+ for log_delete in log_to_delete:
+ self.sudo().env["wecom.apps"].back_message(log_delete.msg_id, category='approval')
log_to_delete.unlink()
if record.log_ids2:
+ for log_id2 in record.log_ids2:
+ self.sudo().env["wecom.apps"].back_message(log_id2.msg_id, category='approval')
record.log_ids2.unlink()
prev_log.write({'approval_state': '1'})
record.write({'state': prev_log.name,
diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py
index 248a5d2c0..ec8692437 100644
--- a/soong_workflow/wizard/soong_workflow_comment_wizard.py
+++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py
@@ -415,7 +415,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
if not next_node_employee_log:
# 创建初步记录,状态为"待审批"
- next_node_employee_log = self.sudo().env["soong.workflow.log"].create({
+ self.sudo().env["soong.workflow.log"].create({
"code": self.code,
"model": self.res_model,
"res_id": self.res_id,
@@ -439,14 +439,18 @@ class SoongWorkflowCommentWizard(models.TransientModel):
action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0]
url = f'https://oa.thtzjt.com/web#id={record_id.id}&cids=2&active_id={action_id.id}&model={record_id._name}&view_type=form'
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
- user_id=employee.wecom_userid,
+ user_id='18562027762',
title=record_id._description,
description="标题: {}\n".format(
record_id.name) + self.env.user.name + ' ' + str(
fields.Datetime.now() + timedelta(
hours=8)),
url=url, btntxt="查看详情")
- # next_node_employee_log.msg_id = result_data[1]['msgid']
+ msg_id = result_data[-1]['msgid']
+ target_logs = record_id.log_ids.filtered(lambda l: l.done_by == employee.user_id.id)
+ if target_logs:
+ target_logs.msg_id = msg_id
+
else: # 串审模式 (沿用原有逻辑)
# 查找下一个节点
next_node_id = record_id.workflow_id.node_ids.search([
@@ -675,7 +679,11 @@ class SoongWorkflowCommentWizard(models.TransientModel):
"done_by": self.employee_ids.user_id.id,
"node_btn_name": "0",
})
- self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=self.employee_ids.wecom_userid, title=record_id._description, description=description, url=url, btntxt="查看详情")
+ result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id='18562027762', title=record_id._description, description=description, url=url, btntxt="查看详情")
+ msg_id = result_data[-1]['msgid']
+ target_logs = record_id.log_ids.filtered(lambda l: l.done_by == employee.user_id.id)
+ if target_logs:
+ target_logs.msg_id = msg_id
for emp in self.dep_manager_employee_ids:
workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.dep_manager_employee_ids if employee.user_id]
next_node_id = record_id.workflow_id.node_ids.search([('name', '=', '承办'), ('workflow_id', '=', record_id.workflow_id.id)])
@@ -688,7 +696,11 @@ class SoongWorkflowCommentWizard(models.TransientModel):
"done_by": emp.user_id.id,
"node_btn_name": "0",
})
- self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=emp.wecom_userid, title=record_id._description + "承办", description=description, url=url, btntxt="查看详情")
+ result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=emp.wecom_userid, title=record_id._description + "承办", description=description, url=url, btntxt="查看详情")
+ msg_id = result_data[-1]['msgid']
+ target_logs = record_id.log_ids.filtered(lambda l: l.done_by == employee.user_id.id)
+ if target_logs:
+ target_logs.msg_id = msg_id
for employee in self.circulated_employee_ids:
workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.circulated_employee_ids if employee.user_id]
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
@@ -711,7 +723,11 @@ class SoongWorkflowCommentWizard(models.TransientModel):
"node_btn_id": self.node_btn_id.id,
"approval_state": "0",
})
- self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid, title=record_id._description + "传阅/抄送",description=description, url=url, btntxt="查看详情")
+ result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id='18562027762', title=record_id._description + "传阅/抄送",description=description, url=url, btntxt="查看详情")
+ msg_id = result_data[-1]['msgid']
+ target_logs = record_id.log_ids2.filtered(lambda l: l.done_by == employee.user_id.id)
+ if target_logs:
+ target_logs.msg_id = msg_id
workflow_record_id.employee_ids = self.dep_manager_employee_ids + self.employee_ids + self.circulated_employee_ids
record_id.log_ids[-1].write({"comment": self.comment, "approval_state": "2", "lase_click_date": fields.Datetime.now()})
if self.node_btn_name == "收回":
@@ -749,4 +765,4 @@ class SoongWorkflowCommentWizard(models.TransientModel):
related_record = self.env[self.res_model].browse(self.res_id)
if hasattr(related_record, 'self_users_ids'):
user_ids = [employee.user_id.id for employee in self.employee_ids if employee.user_id]
- related_record.self_users_ids = [(6, 0, user_ids)] if user_ids else [(5,)]
\ No newline at end of file
+ related_record.self_users_ids = [(6, 0, user_ids)] if user_ids else [(5,)]
diff --git a/yuthon_wechat/models/wecom_apps.py b/yuthon_wechat/models/wecom_apps.py
index 5146c2c2a..f85726ad5 100644
--- a/yuthon_wechat/models/wecom_apps.py
+++ b/yuthon_wechat/models/wecom_apps.py
@@ -103,6 +103,11 @@ class WeComApps(models.Model):
data = {'msgid': msg_id}
url = f'https://qyapi.weixin.qq.com/cgi-bin/message/recall?access_token={token}'
requests.post(url=url, data=json.dumps(data))
+ if category == 'approval':
+ token = self.env['wecom.apps'].search([('name', '=', '审批消息通知')])['access_token']
+ data = {'msgid': msg_id}
+ url = f'https://qyapi.weixin.qq.com/cgi-bin/message/recall?access_token={token}'
+ requests.post(url=url, data=json.dumps(data))
def sync_send_message_textcard(self, content_item='', touser='', category='default', user_id=None, title="", description="", url="", btntxt="详情"):
"""
diff --git a/yuthon_will_task/models/yuthon_will_task.py b/yuthon_will_task/models/yuthon_will_task.py
index 9b6d5f3f7..faa441259 100644
--- a/yuthon_will_task/models/yuthon_will_task.py
+++ b/yuthon_will_task/models/yuthon_will_task.py
@@ -204,7 +204,7 @@ class YuthonWillTask(models.Model):
title="日程事项提醒", description=data, url=url, btntxt="详细信息")
test_msg_id = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', user_id="18562027762",
title="日程事项提醒", description=data, url=url, btntxt="详细信息")
- # self.write({'msg_id': test_msg_id[-1]['msgid']})
+ self.write({'msg_id': test_msg_id[-1]['msgid']})
return {
'type': 'ir.actions.client',
'tag': 'display_notification',